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》

你可能感兴趣的:(automaticallyAdjustsScrollViewInsets疑问)