我想知道当UITableView嵌套在UIScrollView中并且还观察到这个函数时,是否有人从用户点击状态栏触发了对于UITableView的scrollsToTop(或任何其他方法)运气?我知道这可能不是一种好的做法,但在这种情况下,UX类型的这种层次结构的调用.
无论哪种方式,我都看到了一大堆建议,从私有方法(显然不会发生)到在状态栏上添加虚假窗口(也不会发生).
Luk*_*uke 13
好的,所以这里的答案有两个:
在同一个UIView上,属性scrollsToTop设置为YES,不能有多个UIScrollView(或从UIScrollView派生或使用UIScrollView的类 - 即UITableView).选择您想要的功能,并确保所有其他功能都没有
例如,执行以下操作:
scrollView.scrollsToTop = NO;
tableView.scrollsToTop = YES; // or not set
Run Code Online (Sandbox Code Playgroud)实现UIScrollView委托方法scrollViewShouldScrollToTop:
,return YES
如果调用UIScrollView是UITableView.
道具这个答案对提非多重scrollsToTop
选择.
She*_*deh 12
只是想分享我写的一个有助于调试这些情况的小功能.正如其他人所提到的,你必须确保只有一个滚动视图打开了scrollsToTop.如果嵌入复杂的视图层次结构,可能很难确定哪个滚动视图是罪魁祸首.只需在创建视图层次结构后调用此方法,就像在viewDidAppear中一样.level参数只是为了帮助缩进,你应该用0来播种.
-(void)inspectViewAndSubViews:(UIView*) v level:(int)level {
NSMutableString* str = [NSMutableString string];
for (int i = 0; i < level; i++) {
[str appendString:@" "];
}
[str appendFormat:@"%@", [v class]];
if ([v isKindOfClass:[UITableView class]]) {
[str appendString:@" : UITableView "];
}
if ([v isKindOfClass:[UIScrollView class]]) {
[str appendString:@" : UIScrollView "];
UIScrollView* scrollView = (UIScrollView*)v;
if (scrollView.scrollsToTop) {
[str appendString:@" >>>scrollsToTop<<<<"];
}
}
NSLog(@"%@", str);
for (UIView* sv in [v subviews]) {
[self inspectViewAndSubViews:sv level:level+1];
}}
Run Code Online (Sandbox Code Playgroud)
在视图控制器的主视图中调用它.
在日志中,您应该看到>>> scrollsToTop <<<旁边每个打开它的视图,以便于查找错误.