zoukankan      html  css  js  c++  java
  • UIScrollerView遇到UINavigationController

    项目中有一个页面的某个部分需要横向滚动显示多张图片。很自然想到使用UIScrollview,具体实现非常容易,最开始做了一个Demo,效果如下:

                                          

    可是把这个ViewController添加到一个UINavigation中,结果就完全不一样了,如下:

                                         

    原因也很容易分析出来,无非是UIScrollView的contentInset被改变了,很容易验证这个说法,在viewDidAppear中将UIScrollView对象的contentInset值给打印出来即可。

    现在所要做的事情是解决这个问题,处理的对象当然就是UIScrollView对象的contentInset属性了,将之设置为UIEdgeInsetsMake(0, 0, 0, 0)即可,但在哪儿设置了,笔者在viewDidLoad、viewWillAppear和viewDidAppear这些回调函数中都试过,可是都失败了。

    后来查阅stackoverflow,终于找到了解决方法:在相应的ViewController中实现viewDidLayoutSubviews方法,然后设置UIScrollView实例的contentInset属性即可,如下:

    - (void)viewDidLayoutSubviews {
        self.scrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
        [super viewDidLayoutSubviews];
    }

    笔者手贱,发现在viewWillLayoutSubviews中处理同样也可以解决这个问题;甚至隔了几天之后,发现另外一个解决问题的方案:设置相关UINavigationController的navigationBar的translucent属性为False也可以。

    还有一些方法:设置ViewController的属性automaticallyAdjustsScrollViewInsets为False。

    其实原因很简单,在iOS官方文档《View Controller Catalog for iOS》中能找到答案。

  • 相关阅读:
    多线程编程:阻塞、并发队列的使用总结
    为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手
    多线程编程:多线程并发制单的开发记录【一】
    如何使用线程锁来提高多线程并发效率
    如何在分布式环境中同步solr索引库和缓存信息
    前端性能优化指南
    DOM操作方法、属性
    CSS样式手册
    XSS跨站脚本攻击
    数组和对象的使用方法
  • 原文地址:https://www.cnblogs.com/FightingLuoYin/p/4422816.html
Copyright © 2011-2022 走看看