强制视图在UIStackView

时间:2018-05-24 14:14:16

标签: ios swift xcode uistackview

我正在使用Swift创建应用程序用户界面的一部分,我面临的问题是我有一个UIStackView有3个子视图: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,这是结果 enter image description here

还剩下空白区域,但第一个UILabel正在使用它。如何强制第二个UILabel使用可用空格?

2 个答案:

答案 0 :(得分:12)

优先考虑您的第二个标签(具有无限行数的标签)的设置是将stackview设置为“按比例填充”分布(这意味着视图的大小基于他们的内在规模和拥抱/抵抗优先权)

enter image description here

结合左侧标签&的 1000 ('required')的水平“内容压缩阻力优先级”开关(意思是“不压缩”)

enter image description here

解决了这个问题:

enter image description here

答案 1 :(得分:2)

您可能需要将每个标签/开关的水平contentCompressionResistancemonths = { 'Jan' : 1, 'Feb' : 2, 'Mar' : 3, 'Apr' : 4, 'May' : 5, 'Jun' : 6, 'Jul' : 7, 'Aug' : 8, 'Sep' : 9, 'Oct' : 10, 'Nov' : 11, 'Dec' : 12 } temp = df['issue_d'] temp.split('-') return temp[1] + '-' + str(months[temp[0]]) 设置为与其他标签/开关不同的内容,确保您希望展开以填充剩余可用空间的那个具有最低的拥抱值。