鉴于视图层次结构:
UIStackView
--UILabel
--UISwitch
标签过早破裂,即使它可以适合单行。
设置numberOfLines = 1
会强制标签正确布局。
如何让UILabel仅在需要时执行换行?
代码:
private lazy var title: UILabel = {
let v = UILabel()
v.numberOfLines = 0
return v
}()
private lazy var toggle = UISwitch()
private lazy var stack = UIStackView(axis: .horizontal,
distribution: .equalSpacing,
alignment: .center,
views: [title,
toggle])
func setupConstraints() {
stack.snp.makeConstraints { (make) in
make.edges.equalTo(contentView.layoutMarginsGuide)
}
}
设置numberOfLines = 1
让我想要实现的目标,但标签会失去其多线功能:
如何强制所需行为而不会失去对多行标签的支持?
当存在大量水平空间时,无论numberOfLines
属性如何,标签都会正确布局:
答案 0 :(得分:2)
将UISwitch
的内容拥抱和抵抗优先级设置为1000.
将视图分布和对齐方式堆叠到fill
。
额外注意 - 如果您希望标签和开关顶部对齐,请将对齐设置为top
。
答案 1 :(得分:1)
在堆栈视图中,您可以为标签提供约束并切换...
1)给出标签前导,顶部,尾部和底部约束。不要给出宽度约束。在尾随约束中,请使用第二项Switch。
2)给你的开关尾随,顶部,底部和固定宽度。
希望它会起作用。