如何为不占据整个父视图的scrollview设置约束

时间:2017-04-23 06:15:32

标签: ios interface-builder scrollview ios-autolayout

我尝试构建类似于ios照片库的UI:导航视图控制器,滚动视图占据父视图的80%高度和100%宽度,集合视图控制器占用其余部分高度和100%宽度。所以这就是它的样子:

enter image description here

蓝色区域是scrollview及其内容视图。底部是一个集合视图,假设其行为类似于旋转木马。您可以在以下屏幕截图中看到我设置的约束:

enter image description here

我想设置scrollview高度,使其仅占据父视图区域的80%,而集合视图占用其余部分。但是,我似乎无法解决滚动视图约束问题,例如autolayout无法解析scrollview的高度/ y位置。正如您在上面的图片中看到的,我尝试将scrollview的高度设置为父视图的50%,但autolayout仍然抱怨无法解析高度。如果我让界面构建器解决问题,它只是在scrollview内的内容视图中添加间距并将其向下推。您可以在以下屏幕截图中看到。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

您的视图heirarchy已正确设置,因此非常好,您正在追踪要添加的约束。我将从第1步开始编写所有约束。

  • UIScrollView superView添加一个top,leading和trailing约束到UIScrollView。同时在superViewUICollectionView之间添加相等的高度约束,并将乘数设置为0.8。
  • 现在将UIScrollView添加到superView下方,并为UICollectionView添加前导,尾随和底部。同时在UIScrollViewUIScrollView之间添加垂直间距。
  • 现在在UIScrollView内添加 contentView 。将 contentView 的行距,顶部,底部和尾部添加到UIScrollView。一旦你这样做,约束就会破坏,Xcode会抱怨。 现在您需要做的更多是在UIScrollView contentView 之间添加相同的高度和宽度约束。将此相等高度约束的优先级(假设您需要垂直滚动)设置为250,以便当UIViewController内的内容变得太大而无法完全显示时,它会中断。

现在就这个额外的间距问题而言。您需要做的是,选择包含UIScrollVIew的{​​{1}},然后为此UIViewController选择属性检查器,取消选中 调整滚动查看insets 选项。有关屏幕截图,请查看this

enter image description here

答案 1 :(得分:1)

正如我从上面看到的那样做以下几点。

  1. 向scrollview添加前导,尾随和顶部约束。
  2. 添加高度约束,即从scrollview拖动到superview并添加相等宽度,在相等宽度约束中将多重因子更改为0.8。
  3. 针对与scrollview相关的superview和垂直空间约束,将前导,底部约束添加到集合视图。