如何找出哪个UIScrollView干扰scrollsToTop?
我有几个视图控制器与一个或多个滚动视图。 虽然我已经明确地在视图控制器中设置了多个滚动视图,但是当我点击状态栏时,一些滚动视图会拒绝向上滚动。
在推动另一个视图控制器并popup之后,手势有时在视图中起作用,但它以前没有。
这很混乱,我只是不知道问题是什么。 如何有效地debugging这个问题? 是否有状态栏的全局(私人)通知,所以我可以手动滚动视图?
我已经使用类似以下的代码来debugging这种情况,之前:
- (void)findMisbehavingScrollViews { UIView *view = [[UIApplication sharedApplication] keyWindow]; [self findMisbehavingScrollViewsIn:view]; } - (void)findMisbehavingScrollViewsIn:(UIView *)view { if ([view isKindOfClass:[UIScrollView class]]) { NSLog(@"Found UIScrollView: %@", view); if ([(UIScrollView *)view scrollsToTop]) { NSLog(@"scrollsToTop = YES!"); } } for (UIView *subview in [view subviews]) { [self findMisbehavingScrollViewsIn:subview]; } }
根据您find的UIScrollView的数量,您可以修改该代码以帮助debugging您的特定情况。
一些想法:
- 更改各种滚动视图的背景颜色以在屏幕上标识它们。
- 打印这些滚动视图的视图层次结构以标识其所有的高级视图。
理想情况下,您应该只在窗口层次结构中find一个将scrollsToTop设置为YES的UIScrollView。
为了方便起见,我把接受的答案变成了迅捷:
func findMisbehavingScrollViews() { var aview = UIApplication.sharedApplication().keyWindow findMisbehavingScrollViewsIn(aview!) } func findMisbehavingScrollViewsIn(aview: UIView) { if aview.isKindOfClass(UIScrollView) { if (aview as! UIScrollView).scrollsToTop { print("found uiscrollview \(aview)") } } for bview in aview.subviews { findMisbehavingScrollViewsIn(bview) } }