UILabel 在 UIStackView 内部提前中断
UILabel breaks early inside UIStackView
鉴于视图层次结构:
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
得到了我想要实现的结果,但标签失去了它的多行功能:
如何在不失去对多行标签的支持的情况下强制期望的行为?
当有很多横向 space 时,无论 numberOfLines
属性:
,标签都会正确布局
在您的堆栈视图中,您可以对您的标签和开关进行约束...
1) 给你的标签 leading, top , trailing 和 bottom 约束。不要给宽度约束。在尾随约束中取第二项 Switch.
2) 给你的开关尾部、顶部、底部和固定宽度。
希望它会起作用。
将您的 UISwitch
的内容拥抱和抵抗优先级设置为 1000。
堆栈视图分布和对齐 fill
。
额外注意 - 如果您希望标签和开关顶部对齐,请将对齐方式设置为 top
。
在另一个堆栈视图中添加标签。
UIStackView
--UIStackView
--UILabel
--UISwitch
鉴于视图层次结构:
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
得到了我想要实现的结果,但标签失去了它的多行功能:
如何在不失去对多行标签的支持的情况下强制期望的行为?
当有很多横向 space 时,无论 numberOfLines
属性:
在您的堆栈视图中,您可以对您的标签和开关进行约束...
1) 给你的标签 leading, top , trailing 和 bottom 约束。不要给宽度约束。在尾随约束中取第二项 Switch.
2) 给你的开关尾部、顶部、底部和固定宽度。
希望它会起作用。
将您的 UISwitch
的内容拥抱和抵抗优先级设置为 1000。
堆栈视图分布和对齐 fill
。
额外注意 - 如果您希望标签和开关顶部对齐,请将对齐方式设置为 top
。
在另一个堆栈视图中添加标签。
UIStackView
--UIStackView
--UILabel
--UISwitch