Ios 为什么UIStackView不堆叠UILabel arrangedSubview?
我有一个UIStackView,作为排列的子视图,我有两个UIView和一个UILabel。UIView一个接一个地堆叠,而UILabel与子视图的前缘对齐 代码: 输出:Ios 为什么UIStackView不堆叠UILabel arrangedSubview?,ios,uilabel,uistackview,Ios,Uilabel,Uistackview,我有一个UIStackView,作为排列的子视图,我有两个UIView和一个UILabel。UIView一个接一个地堆叠,而UILabel与子视图的前缘对齐 代码: 输出: 尝试将分发更改为填充 stack.distribution = .fill 具有多行集 评论之后 为了清楚起见 首先,不要按比例使用.fill。不管你怎么想,那都是错的。您已明确将两个“图标”分别设置为42点宽。如果堆栈视图按比例使用.filly,它将尝试更改这些视图的宽度,您将获得自动布局冲突 其次,具有.number
尝试将
分发
更改为填充
stack.distribution = .fill
具有多行集
评论之后
为了清楚起见
首先,不要按比例使用.fill
。不管你怎么想,那都是错的。您已明确将两个“图标”分别设置为42点宽。如果堆栈视图按比例使用.filly
,它将尝试更改这些视图的宽度,您将获得自动布局冲突
其次,具有.numberOfLines=0
的ui标签必须具有宽度。否则,就没有办法知道在哪里中断文本。。。如果有大量文本,它将从视图的侧面延伸出去
第三,行label.sizeToFit()
在这里无法实现任何功能。删除它就行了
如果添加此行:
stack.widthAnchor.constraint(equalToConstant: 200.0).isActive = true
然后堆栈视图将扩展到200 pts宽
自动布局将使第一个排列视图的宽度为42(因为这是您声明的宽度),第二个视图的宽度相同。由于已将间距设置为7
,因此将计算
42 + 7 + 42 + 7
这等于98
。它从堆栈视图的宽度中减去:
200 - 98 = 102
这是标签的宽度
结果:
如果您不想显式地将宽度设置为200
,可以将其设置为superview宽度的百分比,或者为其设置前导和尾随约束。这样就可以将其放入堆栈(yay),但它不考虑uilabel的固有大小,即它会将其压缩,使其与其他两个UIView的宽度相同,并使文本在几乎每个单词之后断开。要使其拉伸注释、行或为其指定宽度,多行标签没有固有宽度(当然,它有,但不是以您尝试使用它的方式)。您必须以某种方式给它一个宽度,通过约束或约束其容器的宽度——在本例中是堆栈视图的宽度。
200 - 98 = 102