【问题标题】:How do you set constraints for scrollview that doesn't occupy the whole parent view如何为不占用整个父视图的滚动视图设置约束
【发布时间】:2017-09-19 22:48:09
【问题描述】:

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

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

我想设置滚动视图高度,使其仅占据父视图空间的 80%,而集合视图占据其余部分。但是,我似乎无法解决滚动视图约束问题,例如自动布局无法解决滚动视图的高度/y 位置。如上图所示,我尝试将滚动视图的高度设置为父视图的 50%,但自动布局仍然抱怨无法解析高度。如果我让界面生成器解决问题,它只会在滚动视图内的内容视图中添加间距并因此将其向下推。您可以在以下屏幕截图中看到这一点。

【问题讨论】:

    标签: ios interface-builder scrollview ios-autolayout


    【解决方案1】:

    您的视图层次结构已正确设置,因此非常好,并且您在添加哪些约束方面处于正确的轨道上。我将从第 1 步开始编写所有约束。

    • 向您的UIScrollView 添加一个顶部、前导和尾部约束到superView。还要在 UIScrollViewsuperView 之间添加相等的高度约束,并将乘数设置为 0.8。
    • 现在将您的UICollectionView 添加到UIScrollView 下方,并在superView 的后面加上前导、尾随和底部。还要在UICollectionViewUIScrollView 之间添加一个垂直间距。
    • 现在为UIScrollView 内的contentView 添加。将 contentView 的前导、顶部、底部和尾部添加到 UIScrollView。一旦你这样做了,约束就会被打破,Xcode 会抱怨。 现在您需要做的更多是在UIScrollViewcontentView 之间添加相等的高度和宽度约束。将此等高约束(假设您想要垂直滚动)的优先级设置为 250,以便在 UIScrollView 内的内容变得太大而无法完全显示时中断。

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

    【讨论】:

    • 没想到回复这么全面。非常感谢你做的这些!而且我以前从未使用过优先级,您的回复教会了我一些新的东西。也谢谢你。
    【解决方案2】:

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

    1. 为滚动视图添加前导、尾随和顶部约束。
    2. 添加高度约束,即从滚动视图拖动到超级视图并添加等宽,在等宽约束中将倍数更改为 0.8。
    3. 相对于超级视图为集合视图添加前导尾随底部约束和相对于滚动视图的垂直空间约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多