一、起因
有网友总结(参考文章1和2):
如果一个控制器A在导航控制器管理下,控制器A第一个为UIScrollView子控件的内容会下移64点(即contentInset.top为64),设控制器A的automaticallyAdjustsScrollViewInsets属性为NO可关闭该功能。
二、测试
在Xcode11.3,iOS9/10/11环境下测试发现与网友总结有些不同:
如果一个控制器A在导航控制器管理下,有以下情况(注意斜粗体内容):
控制器A.view为UIScrollView类型。
1.1 automaticallyAdjustsScrollViewInsets为YES时,A.view内容下移64点。
1.2 automaticallyAdjustsScrollViewInsets为NO时,A.view内容不下移。控制器A.view为UITableView类型时。
2.1 automaticallyAdjustsScrollViewInsets为YES时,A.view内容下移64点。
2.2 automaticallyAdjustsScrollViewInsets为NO时,A.view内容下移64点。控制器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。
参考文章
3.《adjustedContentInset | safeAreaInset | contentInset | addtionalSafeAreaInset》