为啥约束更喜欢调整一个堆栈的大小而不是另一个,你如何改变这种偏好? (xCode)

Posted

技术标签:

【中文标题】为啥约束更喜欢调整一个堆栈的大小而不是另一个,你如何改变这种偏好? (xCode)【英文标题】:Why do constraints prefer resizing of one stack over another, and how do you change this preference? (xCode)为什么约束更喜欢调整一个堆栈的大小而不是另一个,你如何改变这种偏好? (xCode) 【发布时间】:2020-05-26 20:31:12 【问题描述】:

我试图在 xCode 中使用约束来实现自动布局,但我遇到了问题。此处显示的是应用程序的当前布局: Current Layout。我有两个堆栈,一个在顶部,一个在底部。我已将顶部堆栈的位置限制为粘合到顶部、左侧和右侧的安全区域,并将底部堆栈的位置限制为粘合到底部、左侧和右侧的安全区域。我现在想将顶部堆栈限制为等于底部堆栈上方的一些小间距,仅在必要时拉伸 顶部堆栈底部堆栈保持完全静止.相反,我得到了相反的结果,Bottom Stack 冲上去与 Top Stack 相遇。 xCode 如何选择让底部堆栈拉伸,而不是顶部,我该如何解决这个问题?

这是一个 gif,显示了我遇到的问题。请注意,我已将底部堆栈设置为在底部分布,因此它最初似乎没有拉伸,但一旦我从底部切换到填充,您很快就会看到问题:Constraint Problem Gif。

谢谢。

【问题讨论】:

要么为底部堆栈视图提供固定高度,要么保持底部堆栈视图垂直拥抱优先级和抗压性高于顶部堆栈视图 【参考方案1】:

您正在寻找的自动布局方面是 contentHuggingPriority 和 contentCompressionResistancePriority。这些决定了哪些视图更有可能拉伸或压缩。

将下层栈的垂直 contentHuggingPriority 增加到大于上层栈的垂直 contentHuggingPriority,那么自动布局系统就会使顶层栈拉伸。

【讨论】:

我试过这个,但不幸的是它没有用。我将垂直 contentHuggingPriority 和垂直 contentCompressionResistancePriority 更改为底部堆栈的 100 和顶部堆栈的 1,不幸的是没有任何改变。您认为还有什么其他可能导致此问题的原因吗? 许多视图的默认值在 500 到 750 之间,因此可能会有其他问题。尝试just将较低堆栈的垂直 contentHuggingPriority 设置为 .required,也就是 1000? 知道了!我只是重新排列了我的按钮,它更简单。尽管 contentHuggingPriority 有时确实会做一些事情。感谢您的帮助!

以上是关于为啥约束更喜欢调整一个堆栈的大小而不是另一个,你如何改变这种偏好? (xCode)的主要内容,如果未能解决你的问题,请参考以下文章

为啥更喜欢二进制补码而不是有符号数的符号和大小?

为啥引入 `ResizeObserver` 来监听调整大小的变化,而不是更简单的 Element.prototype.addEventListener('resize', callback)

为啥现实世界的服务器更喜欢 gzip 而不是 deflate 编码?

为啥添加约束会消除调整 NSWindow 大小的能力?

为啥编译器保留一点堆栈空间而不是整个数组大小?

为啥编译器保留一点堆栈空间而不是整个数组大小?