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 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,566评论 6 30
  • 文/粥粥 往事无可回首 余生请多指教 今世愿无背离 来生仍多包涵 熬夜看完《余生,请多指教》 这是近来唯一一本小说...
    张国荣的小迷妹阅读 1,038评论 2 2
  • 不用心观察,我常常以为北京只有三个季节,夏秋冬。其中,属夏天和冬天时间长。其实要不是秋天到处是银杏耀眼的金黄,步履...
    藜蒿阅读 320评论 0 1
  • 作者/一尺蜜 1,有火锅不寂寞 “3、2、1!找一个最爱的深爱的想爱的亲爱的人,来告别单身!”2011年11月11...
    西窗烛暖阅读 693评论 2 15