具有动态标签宽度的堆栈视图分布
Posted
技术标签:
【中文标题】具有动态标签宽度的堆栈视图分布【英文标题】:Stack View Distribution with Dynamic Label Width 【发布时间】:2019-12-20 07:12:05 【问题描述】:我有一个 UIStackView
但是,subViews
的第一个视图是 UILabel
,它没有相应地调整大小。
我的代码如下;
private let stackView: UIStackView =
let view = UIStackView()
view.translatesAutoresizingMaskIntoConstraints = false
view.axis = .horizontal
view.distribution = .fillProportionally
view.alignment = .trailing
view.spacing = 8
return view
()
当然,我在init
中添加我的subViews
,如下所示;
stackView.addArrangedSubview(currentBidLabel)
stackView.addArrangedSubview(seperator)
stackView.addArrangedSubview(adCreatedAtLabel)
stackView.addArrangedSubview(moreButton)
我目前的结果如下图所示;
我要找的结果如下;
-
红色 = 动态标签宽度(与蓝色相同)
绿色 = 固定宽度
蓝色 = 填充剩余空间
青色 = 固定宽度
【问题讨论】:
horizontal 堆栈视图不符合.trailing
对齐方式。相反,您应该使用.fill
/.top
/.center
/.bottom
。您是否需要 AED 400 和 1d 前 两个标签占用相同的宽度?
当我按比例填充时,我将视图粉碎成 0 宽度...
【参考方案1】:
您应该为每个标签设置所需的ContentHuggingPriority
。以下设置将满足您的需求
redLabel.setContentHuggingPriority(. required, for: .horizontal)
greenLabel.setContentHuggingPriority(.required, for: .horizontal)
blueLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
cyanLabel.setContentHuggingPriority(.required, for: .horizontal)
defaultLow
表示填充其余部分。
required
表示首先适合。
其他值应该介于这两者之间。
【讨论】:
提供的图像是我现有结果的示例。我需要红色标签与文本一样宽,蓝色填充剩余空间。 你能张贴一张你想要的图片吗? 我通过 red = .required | 得到了想要的结果绿色 = .required |蓝色 = .defaultLow | cyan = .required(请更新您的答案,以便我接受) 嗯。我误解了你的例子。很高兴您解决了问题以上是关于具有动态标签宽度的堆栈视图分布的主要内容,如果未能解决你的问题,请参考以下文章