通过点击状态栏滚动到UITableView的顶部

我知道有很多代码可以将tableview滚动到顶部,但是我想在顶部状态栏被点击的时候这样做,就像在苹果的原生应用程序中一样。 这可能吗?

你可以免费得到这个,但是你应该检查你的UITableViewscrollsToTop属性是YES。

当这不起作用的时候,你有一个UIScrollView (或像UITextView类的后代类)embedded另一个UIScrollView类(如UITableView )内embedded的对象。 在这种情况下,将embedded的UIScrollView类的scrollsToTop设置为NO。 然后点击状态栏行为将工作。

如果您来自Google,需要一个完整的清单:

  1. 检查你在你的UITableView上设置了scrollsToTop = YES(每个Mark的build议)
  2. 确保你已经在窗口的所有其他UITableViews / UIScrollViews / UITextViews上设置了scrollsToTop = NO,这样它们就不会拦截点击。 我发现自己打印了我的窗口中的所有视图多次debugging…
  3. 确保你的表格视图在窗口内的0/0(x / y坐标) – 这是系统知道它应该传递消息

使用其他答案中给出的信息,我将下面的代码添加到我的UITableViewController得到它的工作:

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     for(UITextView * view in self.view.subviews){
        如果([view isKindOfClass:[UITextView class]]){
             view.scrollsToTop = NO;
         }
     }

     self.tableView.scrollsToTop = YES;
 }

这将查找UITableViewController的层次结构中的所有视图,并closures拦截触摸事件的所有UITextView上的scrollsToTop。 然后,确保tableView仍然会收到触摸。

你可以通过调用这个来遍历其他可能拦截的UITableViews / UIScrollViews / UITextViews。

希望这可以帮助!

我有同样的问题,但通过以下步骤修复:

  1. 设置scrollsToTop =是的桌面视图,你要滚动到顶部。
  2. 为所有其他tableview或集合视图或滚动视图设置scrollsToTop = NO。
  3. 如果你的任何tableview单元格有集合视图。 确保你为集合视图设置了scrollsToTop为NO。

如果您的视图控制器/导航控制器作为另一个视图控制器上的子视图添加,请确保将其设置为子控制器。

像Mark说的那样,你只能有一个ScrollsToTop属性设置为TRUE的UIScrollView的子类(通常是表视图)。 可能你有其他人,通常在你的看法UITextView。 只要将他们的scrollsToTop属性设置为FALSE,你就可以走了。

我知道这是相当古老的,但希望这可以帮助。 根据@MarkGranoff的说法,如果多个UIScrollView或其子类已将其设置为YES(默认值),那么scrollsToTop将不起作用,但可能需要进行完整性检查,以检查是否真正搞乱了这种行为。 下面简单的方法遍历视图的子视图,并logging视图中所有UIScrollView的scrollsToTop值。 最好在你的viewDidAppear方法中调用。

 - (void)checkForScrollViewInView:(UIView *)view { for (UIView *subview in [view subviews]) { if ([subview isKindOfClass:[UIScrollView class]]) { NSLog(@"scrollsToTop enabled: %i in scroll view %@", ((UIScrollView *)subview).scrollsToTop, subview); } if (subview.subviews.count > 0) { [self checkForScrollViewInView:subview]; } } } 

这实际上只是一个debugging代码。 一旦你find每个UIScrollView子类的scrollsToTop值,只​​要确保只有一个设置为YES。

在UIScrollView头文件上:

//当用户点击状态栏时,最靠近状态栏的触摸下方的滚动视图将滚动到顶部,但只有当其scrollsToTop属性为YES时,其委托才会从shouldScrollViewScrollToTop返回NO,并且不在顶部。 //在iPhone上,只有在屏幕上有一个滚动视图的情况下,我们才执行这个手势。 如果find多个,则不会滚动。

例如,如果你有像这样的标签的表视图和滚动视图

在这里输入图像说明

你应该在viewDidLoad做这样的事情

 self.tableView.scrollsToTop = true self.tagsView.scrollsToTop = false