包含2个UILabel的UIStackView能否根据内容动态调整尺寸?
你需要的布局可以通过以下两种方案实现:
方案1:嵌套UIStackView实现(最简便)
你之前直接把三个视图塞进同一个StackView出现异常,大概率是StackView层级和属性配置错误,按以下步骤配置即可:
- 整体使用水平方向的外层
UIStackView,设置属性:axis = .horizontalalignment = .center(如果需要图标和文本顶部对齐就设为.top)spacing = 你需要的图标和文本之间的间距- 给外层StackView添加父视图的边距约束,确定它的位置和最大宽高范围
- 外层StackView的第一个子视图是UIImageView,给ImageView添加固定宽高约束(大部分场景下图标尺寸是固定的,如果你需要动态调整尺寸可以省略这步)
- 外层StackView的第二个子视图是垂直方向的内层
UIStackView,设置属性:axis = .verticalalignment = .leadingspacing = 两个Label之间的行间距
- 把两个UILabel添加到内层垂直StackView中,给两个Label设置:
numberOfLines = 0(如果需要支持多行文本自动折行,单行的话设为1即可)- 水平方向的*抗压缩优先级(Content Compression Resistance Priority)*设为751,比UIImageView的默认750更高,避免空间不足时Label被截断
- 如果需要优先保证第一个Label完整显示,可将第一个Label的水平抗压缩优先级设为752,高于第二个Label的751即可
方案2:纯Auto Layout约束实现(灵活性更高)
如果不想用StackView,直接加约束也可以实现动态调整:
- 给UIImageView添加约束:左边缘距父视图固定边距、固定宽高、垂直居中/顶部对齐父视图
- 给第一个Label添加约束:左边缘距ImageView右边缘固定间距、顶部对齐ImageView顶部、右边缘距父视图右边缘≤固定边距
- 给第二个Label添加约束:左边缘和第一个Label左边缘对齐、顶部距第一个Label底部固定间距、右边缘和第一个Label右边缘对齐、底部距父视图底部≤固定边距
内容的提问来源于stack exchange,提问作者Keshav
相关产品推荐
相关产品推荐

