【发布时间】:2018-03-12 08:56:43
【问题描述】:
我在垂直滚动的UIScrollView 中有一个UIStackView,所有内容都使用自动布局进行了限制。滚动视图填充超级视图,堆栈视图填充滚动视图,将各种元素添加到堆栈视图中。为了让它与 Auto Layout 配合得很好并定义滚动视图的内容大小,您还必须指定堆栈视图的宽度。这是通过在堆栈视图上添加宽度约束来完成的,该约束等于滚动视图的宽度。在这一点上,没有什么是模棱两可的,它的行为完全符合预期。
现在,如果您想添加边距以使元素不会拉伸到屏幕的最左右边缘,您可以将堆栈视图上的前导和尾随约束常量更改为在两侧插入 15pt例子。但是你必须确保将等宽约束常数更改为 -30。效果很好,插入了可滚动的内容,仍然允许你在屏幕的远端滑动来滚动。
现在,iPhone X 出现了,15pt 的填充在横向时不再足够,因为内容被放置在外壳传感器下方。因此,您需要更新它以设置边距以尊重安全区域布局边距。您真的只想使用默认边距。您可以更改堆栈视图的前导和尾随约束常量以使用视图的布局边距(尊重安全区域插图),但这不起作用,因为您的等宽约束常量不再是边距数量的两倍,边距是动态的现在。
因此,解决此问题的一种方法是为堆栈视图的前导和尾随和宽度约束创建IBOutlets,然后在布局边距更改时以编程方式对其进行调整 (viewLayoutMarginsDidChange)。但我想知道是否有更好的方法,最好是在 Interface Builder 中工作的解决方案,不需要代码。
【问题讨论】:
-
我还没有找到一种好方法来为我的 iPhone X 情节提要“使用此约束,但还要添加另一个约束或更改此常量”。我认为您的想法是正确的:添加一个插座,并相应地调整您的常量。不过,这有点吹牛。
标签: ios uiscrollview autolayout uistackview