使用autolayout时,UIScrollView contentInset设置为nonZero

时间:2015-12-06 23:11:23

标签: uiscrollview autolayout ios9

所以我有以下视图层次结构:

enter image description here

我的viewController视图中的全尺寸scrollView,具有以下约束:enter image description here

这些是对containerView的约束(忽略倒数第二个,它是我的问题的一个半熟的半修复):

enter image description here

我有状态栏,导航栏和标签栏可见。

当我设置断点来检查scrollView的contentInset时,它显示64位于顶部,49位于底部,左侧和右侧为零。 没有办法在IB中设置contentInset,我尝试在IBAction中将其设置为UIEdgeInsetZeio,但这并没有解决它。这通过在我的contentView上方和下方添加空格来搞砸我的滚动视图,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:5)

默认情况下,视图控制器会扩展顶部导航栏下方的视图,以便您的内容在半透明导航栏下模糊。这由edgesForExtendLayout控制,通过“扩展边缘”设置在故事板中进行管理。

默认情况下,scrollview会自动调整其内容插入内容,以便内容显示在顶部布局指南下方。这由automaticallyAdjustsScrollViewInsets控制,也在Storyboard中管理。

enter image description here

您所做的是将滚动视图的顶部约束到顶部布局指南而不是其超级视图的顶部。通过这样做,您手动将其偏移64点。但是,滚动视图仍然会自动将其内容插入64个点,这就是为什么您在滚动视图的上方和下方看到了额外的空间。

将您的滚动视图限制为其超级视图(因此其内容在顶部/底部栏下方滚动),或禁用视图控制器以自动调整滚动视图插入。