尽管有矛盾,但按钮仍超出父视图

时间:2018-12-18 19:58:35

标签: ios autolayout constraints interface-builder xcode10

我有一个项目,其中两个水平的堆栈视图包装在(主)垂直的堆栈视图中。每个水平的堆栈视图都包含一个按钮和一个开关。

我设置了主StackView的前导和尾随约束。问题在于,当按钮的标题过长时,会将开关推出屏幕限制。

这是在Interface Builder中的外观:

enter image description here

下面是在模拟器中的外观:

enter image description here

按钮和开关之间没有任何约束,因为每次我将这些元素打包到水平堆栈视图中时,所有约束都会丢失。

我通过指定对边距的约束来创建约束:

enter image description here

我试图找到一种解决方案here,但没有找到。

我很迷路,我该怎么办?尽管有限制,为什么开关仍在屏幕之外?我会错过一些关于什么约束的东西吗?

1 个答案:

答案 0 :(得分:2)

首先,您的按钮似乎需要带有标签。按钮不喜欢包含多行内容。如果您出于某种原因需要标签可以轻敲,则可以这样做。

第二,您需要将标签(或按钮)的水平内容压缩抗性优先级降低到749,以使其低于开关(默认值为750)。这样,他们两个将不会为位置而战:开关将获胜,并且标签将允许其自身在地面逐渐变大的情况下发挥作用。

话虽如此,我认为您使用其他底层接口可能会更快乐。堆栈视图,尤其是充当垂直堆栈视图中嵌入的相似行的堆栈视图,似乎不太适合您的工作。这是相同的事情,而是以表格视图的形式完成:

enter image description here

我认为这是实现目标的更好方法。表格视图不必像表格视图那样看起来。在上面的屏幕快照中,表格视图无法滚动,无法选择其单元格,并且没有单元格分隔符。但是,与您正在执行的操作相比,由标签和开关组成的单元的重复更加容易和灵活。将我正在做的事情扩展到更多问题并进行切换是微不足道的,而您正在做的事情并不会轻易轻松地扩展。