gpt4 book ai didi

iOS AutoLayout 约束 `lessThanOrEqualToConstant` 不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:30 26 4
gpt4 key购买 nike

我对 UIStackView 内的 UIView 的自动布局约束有问题。

我的目标是创建一个 View :

private static func makeSpace(with value: CGFloat) -> UIView {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = true

let heightConstraint = view.heightAnchor.constraint(lessThanOrEqualToConstant: value)
heightConstraint.priority = UILayoutPriorityDefaultHigh

NSLayoutConstraint.activate([
view.widthAnchor.constraint(equalToConstant: 295),
heightConstraint
])

return view
}

我想将其作为排列的 subview 添加到 UIStackView 中,作为其他 UIStackView 排列的 subview 之间的空间。

当我使用视觉检查器检查这些 View 时,我的空间 View 的高度为 0。虽然,当我将约束更改为 equalToConstant 时,高度计算正确。

我想使用 lessThanOrEqualToConstant 来缩小这些空间,以防屏幕布局太小而无法以适当的尺寸容纳它们。

有没有人遇到过这个问题?

最佳答案

代码有效,因为 0 实际上小于或等于 295。如果您希望它小于或等于 295,具体取决于堆栈中的其他 View ,您需要另一个约束,告诉它在可能的情况下扩展到 295:

private static func makeSpace(with value: CGFloat) -> UIView {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = true

// this keeps it under the value, we want this to be enforced, so priority stays `required`
let heightConstraint1 = view.heightAnchor.constraint(lessThanOrEqualToConstant: value)

// this constraint will drive the size (the other one is just correcting it)
let heightConstraint2 = view.heightAnchor.constraint(equalToConstant: value)
// modify this priority according to compression resistance of the other views
heightConstraint2.priority = UILayoutPriority(rawValue: 240)

NSLayoutConstraint.activate([
view.widthAnchor.constraint(equalToConstant: 295),
heightConstraint1,
heightConstraint2
])

return view
}

第一个约束使 value 下的空间保持不变(例如 295)。此约束必须具有 required 优先级,因为您不想以任何方式扩展此高度。

第二个约束告诉它保持高度等于 value。但它的优先级较低。所以其他约束可以覆盖它。如果发生这种情况,自动布局系统将尝试尽可能接近实现它 - 所以如果它不能是 295,但它可以是 230,那将会发生。

旁注:

如果您不关心将其扩展到比 value 更大的值(例如 295),那么您根本不需要第一个约束。我把它放在那里是因为我认为这是必须保留的空间的限制。

另一个旁注:

CompressionResistancePriorityContentHuggingPriority 适用于具有固有大小的 View ,不适用于 UIView

关于iOS AutoLayout 约束 `lessThanOrEqualToConstant` 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com