我知道有很多代码可以将tableview滚动到顶部,但我想在点击顶级状态栏时执行此操作,就像Apple的原生应用程序一样。这可能吗?
答案 0 :(得分:148)
您可以免费获得此内容,但是应该检查scrollsToTop
的{{1}}属性是否为。
如果这不起作用,那么当你有一个UITableView
(或者像UITextView这样的后代类)对象嵌入到另一个UIScrollView
类(如UIScrollView
)中时。在这种情况下,请将嵌入式UITableView
类中的scrollsToTop
设置为NO。然后tap-the-status-bar行为将起作用。
答案 1 :(得分:31)
如果您来自Google并需要完整的核对清单:
答案 2 :(得分:6)
使用其他答案中提供的信息,我将以下代码添加到我的UITableViewController中,让它工作:
- (void)viewDidLoad { [super viewDidLoad]; for (UITextView *view in self.view.subviews) { if ([view isKindOfClass:[UITextView class]]) { view.scrollsToTop = NO; } } self.tableView.scrollsToTop = YES; }
这将查看UITableViewController层次结构中的所有视图,并在拦截触摸事件的所有UITextView上关闭scrollsToTop。然后,确保tableView仍然可以接收触摸。
你可以修改它来遍历可能正在拦截的其他UITableViews / UIScrollViews / UITextViews。
希望这有帮助!
答案 3 :(得分:6)
我遇到了同样的问题,但通过以下步骤修复:
如果您的视图控制器/导航控制器作为子视图添加到另一个视图控制器上,请确保将其设置为子控制器。
答案 4 :(得分:2)
答案 5 :(得分:2)
我知道这是一个古老的,但希望这可以帮助。根据@MarkGranoff的说法,如果多个UIScrollView或其子类将其设置为YES(默认值),则scrollsToTop不起作用,理智检查可能值得检查谁实际上搞砸了这种行为。下面的简单方法循环遍历视图的子视图,并在视图中记录所有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];
}
}
}
这只是一个调试代码。一旦找到每个UIScrollView子类的scrollsToTop值,只需确保只有一个设置为YES。
答案 6 :(得分:1)
在UIScrollView头文件中:
//当用户点击状态栏时,最接近状态栏的触摸下方的滚动视图将滚动到顶部,但仅当其
scrollsToTop
属性为YES时,其委托才会返回来自shouldScrollViewScrollToTop
的NO,并且它尚未排在最前面。 //在iPhone上,只有在scrollsToTop
== YES的屏幕滚动视图中,我们才会执行此手势。如果找到多个,则不会滚动任何一个。
答案 7 :(得分:0)
例如,如果你有一个表视图和滚动视图,像这样的标签
你应该在viewDidLoad
self.tableView.scrollsToTop = true
self.tagsView.scrollsToTop = false
答案 8 :(得分:0)
可以加载多个 UIScrollView后代,例如:在包含UITableViews的每个页面上都有一个UIPageViewcontroller。
scrollsToTop 属性默认为 true 。
因此,除了处理嵌套的UIScrollViews的scrollsToTop属性外,您还应该执行以下操作:
//When the view is loaded disable scrollsToTop, this view may not be the visible one
override func viewDidLoad() {
super.viewDidLoad()
...
tableView.scrollsToTop = false
}
//Now it's time to enable scrolling, the view is guaranteed to be visible
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
tableView.scrollsToTop = true
}
//Do not forget to disable scrollsToTop, making other visible UIScrollView descendant be able to be scrolled to top
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.tableView.scrollsToTop = false
}
这样只会将一个顶级UITableView的scrollsToTop设置为true。