如何设置不占用整个父视图的滚动视图约束

问题描述:

我试图构建类似于ios照片库的UI:带有滚动视图的导航视图控制器占用80%高度和100%宽度父视图和集合视图控制器占据其余高度和100%宽度。因此,这里是它的样子:如何设置不占用整个父视图的滚动视图约束

enter image description here

蓝色区域是滚动视图和内容视图。底部是一个集合视图,假设其行为类似于传送带。你可以看到,我在下面的截图设置了限制:

enter image description here

我想设置了滚动高度,使得它只占父视图房地产的80%和集合视图占据剩下的。不过,我似乎无法解决scrollview约束问题,例如autolayout无法解析scrollview的高度/ y位置。正如你在上面的图片中看到的,我试图将scrollview的高度设置为父视图的50%,但是自动布局仍然抱怨无法解析高度。如果我让界面生成器解决问题,它只会将间距添加到scrollview内的内容视图中,并将其推下。你可以在下面的截图中看到。

enter image description here

enter image description here

您的看法heirarchy设置正确,所以这很好,你在正确的轨道上添加什么约束。我打算写的所有限制从步骤1开始

  • 要将UIScrollView加顶,开头和结尾约束到superView。在UIScrollViewsuperView之间也要加上相同的高度限制,并将乘数设为0.8。
  • 现在在UIScrollView下面加上你的UICollectionView,并给它一个领先,尾随和底部的superView。还要在UICollectionViewUIScrollView之间添加垂直间距。
  • 现在,在UIScrollView内部添加contentView。为contentView添加领先,顶部,底部和尾部至UIScrollView。只要你这样做,约束将会中断,Xcode会抱怨。 现在您需要做的更多的事情是在UIScrollViewcontentView之间添加相同的高度和宽度约束。将此等高度约束的优先级设置为250(假设您想要垂直滚动),以便在UIScrollView内的内容变得太大而不能完全显示时断开。

现在就这个额外的间距问题而言。你需要做的是,选择具有您UIScrollVIewUIViewController,然后选择属性检查器这个UIViewController取消选中调整滚动视图插图选项。截图请查看this

enter image description here

+0

我并不期待这样全面的答复。非常感谢你做的这些!我以前从来没有用过优先考虑,你的回复给了我一些新的东西。感谢您的支持。 – user30646

正如我从上面看到执行以下操作。

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