【发布时间】:2018-05-27 04:05:08
【问题描述】:
我在UIStackView 内遇到UIView 的自动布局约束问题。
我的目标是创建一个视图:
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
}
我想将此作为排列的子视图添加到 UIStackView,作为其他 UIStackView 排列的子视图之间的空格。
当我使用视觉检查器检查这些视图时,我的空间视图的高度为0。虽然,当我将约束更改为equalToConstant 时,高度计算正确。
我想使用lessThanOrEqualToConstant 让这些空间缩小,以防屏幕布局太小而无法适应适当的尺寸。
还有其他人遇到过这个问题吗?
【问题讨论】:
-
您不应该在该字段中输入一些值吗? (我猜是 CGFloat?)
-
什么意思?我将
value: CGFloat传递给约束... -
答案取决于您尝试实现的确切行为,但您可以尝试将视图的
verticalCompressionResistance设置为 1000。这应该会使您的间距视图仅在需要时缩小。您还可以将 heightConstraint 设为必需,而不仅仅是高优先级。 -
lessThanOrEqualToConstant 约束不足以使自动布局知道实际高度,但仅当视图上下钩到 UILabel 等可调整大小的元素时才会起作用
-
@DavidGanster,垂直压缩阻力不起作用。实际上,我不明白为什么应该这样做,因为它用于具有固有大小的视图。
标签: ios swift autolayout uistackview