- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对 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),那么您根本不需要第一个约束。我把它放在那里是因为我认为这是必须保留的空间的限制。
另一个旁注:
CompressionResistancePriority
和 ContentHuggingPriority
适用于具有固有大小的 View ,不适用于 UIView
。
关于iOS AutoLayout 约束 `lessThanOrEqualToConstant` 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790098/
我有两个 View ,previewSection 和 settingsEditSection。我正在尝试对这些 View 进行布局以实现以下目标: previewSection 的顶部锚定到父 Vi
我对 UIStackView 内的 UIView 的自动布局约束有问题。 我的目标是创建一个 View : private static func makeSpace(with value: CGFl
我是一名优秀的程序员,十分优秀!