iOS中scrollToTop无效的解决方案

前言

scrollToTop属性提供了点击iPhone状态栏页面回到顶部的功能,极大的方便了开发者的工作量。但是在使用的过程中,因为页面的复杂,经常会造成scrollToTop不生效的问题。

下文中提到的UIScrollView是指继承自或者包含了UIScrollView的View,如UITextView,UICollectionView, UITableView,UIWebView等

首先,在确保scrollToTop = YES或者是scrollViewShouldScrollToTop:代理方法返回的是YES的情况下,如果scrollToTop无效,那么就要检查下当前view上是不是有多个UIScrollView了。

接下来是逐步排查这个问题的步骤:

  1. 尝试直接查找页面上的其它UIScrollView,设置scrollToTop = NO;
  2. 如果第一步已经做过,scrollToTop仍然无效,那么就使用分类方法打印出当前页面上的所有scrollToTop = YES的view,并把隐藏的这些UIScrollView的scrollToTop设置为NO
@interface UIView (UIScrollViewDetect)

- (void)detectScrollsToTopViews;

@end


@implementation UIView (UIScrollViewDetect)

- (void)detectScrollsToTopViews {
    for (UIView *view in self.subviews) {
        if ([view isKindOfClass:UIScrollView.class]) {
            UIScrollView *scrollView = (UIScrollView *)view;
            if (scrollView.scrollsToTop) {
                NSLog(@"%@", scrollView);
            }
        }
        [view detectScrollsToTopViews];
    }
}

@end
  1. 如果找到了影响的UIScrollView,但是view是第三方库里的,无法修改其scrollToTop的属性,那么可以使用extension在当前类中把私有的UIScrollView的属性暴露出来,再设置其scrollToTop属性,操作方法参考另外一篇文章:
    OC中使用类别Extension调用私有方法

作者语:
开发中遇到的大部分问题都有迹可循,碰到问题不要急躁,认真分析,逐步突破,最终一定能解决。

你可能感兴趣的:(iOS中scrollToTop无效的解决方案)