automaticallyAdjustsScrollViewInsets疑问

一、起因

有网友总结(参考文章1和2):

如果一个控制器A在导航控制器管理下,控制器A第一个为UIScrollView子控件的内容会下移64点(即contentInset.top为64),设控制器A的automaticallyAdjustsScrollViewInsets属性为NO可关闭该功能。

二、测试

在Xcode11.3,iOS9/10/11环境下测试发现与网友总结有些不同:

如果一个控制器A在导航控制器管理下,有以下情况(注意斜粗体内容):

  1. 控制器A.view为UIScrollView类型。
    1.1 automaticallyAdjustsScrollViewInsets为YES时,A.view内容下移64点。
    1.2 automaticallyAdjustsScrollViewInsets为NO时,A.view内容不下移。

  2. 控制器A.view为UITableView类型时。
    2.1 automaticallyAdjustsScrollViewInsets为YES时,A.view内容下移64点。
    2.2 automaticallyAdjustsScrollViewInsets为NO时,A.view内容下移64点。

  3. 控制器A.view不为UIScrollView类型(普通UIView),但A.view的第一个子控件为UIScrollView类型时。
    3.1 automaticallyAdjustsScrollViewInsets为YES时,并且该子控件的y坐标小于64,那么该子控件的内容将向下偏移(状态栏高度+导航栏高度-该子控件y坐标)点。

  • 3.2 automaticallyAdjustsScrollViewInsets为NO时,子控件不会被下移。

注:

  • 这里说的下移是在viewDidAppear方法中打印对象,获取contentOffset.y的值为-64,adjustedContentInset.top为64。
  • 控制器的automaticallyAdjustsScrollViewInsets属性iOS11过期使用UIScrollViewContentInsetAdjustmentBehavior代替(没问题)。

三、待分析

  • bug?不会,苹果应该不会允许这种现象出现。
  • 版本问题?未测试。
  • 细节:这里涉及到adjustedContentInset属性(iOS11),具体参考文章3。

参考文章

1.《iOS控制器有导航栏时tableView的位置》

2.《contentInset的深度分析》

3.《adjustedContentInset | safeAreaInset | contentInset | addtionalSafeAreaInset》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。