我正在使用 Swift 创建我的应用程序 UI 的一部分,我面临的问题是我有一个带有 3 个 subview 的 UIStackView
:2 个 UILabel 和一个 UIImageView。这是我的第一个代码
let switchview = UISwitch()
let nodelableview = UILabel()
nodelableview.textAlignment = NSTextAlignment.right
nodelableview.numberOfLines = 0
nodelableview.text = nodes[i].type + " " + nodes[i].node_name
let statLabel = UILabel()
statLabel.textAlignment = NSTextAlignment.left
statLabel.text = nodes[i].stat
let stack = UIStackView()
stack.axis = .horizontal
stack.spacing = 16
stack.addArrangedSubview(statLabel)
stack.addArrangedSubview(nodelableview)
stack.addArrangedSubview(switchview)
cell.nodesView.addArrangedSubview(stack)
此代码的问题在于,当 nodelabelview
包含长文本时,UIStackView 不会扩展以腾出 2 行或更多行的空间。所以我将对齐设置为 .center
结果如下
还有剩余空间,但第一个 UILabel
没有使用它。如何强制第二个 UILabel
使用可用空间?
请您参考如下方法:
优先考虑第二个标签(行数不受限制的标签)的设置是将堆栈 View 设置为“按比例填充”分布(这意味着 View 的大小基于它们的内在大小和拥抱/抵抗优先级)
结合水平“Content Compression Resistance Priority”1000('required')用于左侧标签和开关(这意味着'不压缩')
解析为: