通过点击状态栏滚动到UITableView的顶部
我知道有很多代码可以将tableview滚动到顶部,但是我想在顶部状态栏被点击的时候这样做,就像在苹果的原生应用程序中一样。 这可能吗?
你可以免费得到这个,但是你应该检查你的UITableView
的scrollsToTop
属性是YES。
当这不起作用的时候,你有一个UIScrollView
(或像UITextView类的后代类)embedded另一个UIScrollView
类(如UITableView
)内embedded的对象。 在这种情况下,将embedded的UIScrollView
类的scrollsToTop
设置为NO。 然后点击状态栏行为将工作。
如果您来自Google,需要一个完整的清单:
- 检查你在你的UITableView上设置了scrollsToTop = YES(每个Mark的build议)
- 确保你已经在窗口的所有其他UITableViews / UIScrollViews / UITextViews上设置了scrollsToTop = NO,这样它们就不会拦截点击。 我发现自己打印了我的窗口中的所有视图多次debugging…
- 确保你的表格视图在窗口内的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。
希望这可以帮助!
我有同样的问题,但通过以下步骤修复:
- 设置scrollsToTop =是的桌面视图,你要滚动到顶部。
- 为所有其他tableview或集合视图或滚动视图设置scrollsToTop = NO。
- 如果你的任何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