UIStackView彼此相邻地动态添加2个标签,没有额外的间距

问题描述 投票:0回答:2

我是iOS开发的新手,我对如何实现这一点感到困惑。

我有2个UILabels添加到UIStackView像这样:

let horizontalStackView1 = UIStackView(arrangedSubviews: [self.label1, self.label2])

当我运行应用程序时,它看起来像这样:

enter image description here

但是,我喜欢标签彼此相邻,之间没有间距:enter image description here

我试过设置qazxsw poi,qazxsw poi等没有运气。

我该如何实现这一目标?

提前致谢!

更新:

代码看起来像这样(顺便说一下它是表格的一个单元格):

horizontalStackView1.distribution
ios swift uilabel uistackview
2个回答
3
投票

这是因为UIStackView选择具有最低内容拥抱优先级的第一个ArrangeSubview并调整其大小,以便stackview的内容占据全宽。

如果您想在这种情况下使用UIStackView,您可以更改内容拥抱优先级,例如。

horizontalStackView1.alignment

0
投票

stackviews分布应设置为class ItemTableViewCell: UITableViewCell { ... let stateLabel = UILabel() let effectiveDateLabel = UILabel() ... var typeImage: UIImage? { ... } var summary: String? { ... } var effectiveDate: Date? { ... } override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) self.accessoryType = .disclosureIndicator ... let horizontalStackView1 = UIStackView(arrangedSubviews: [self.stateLabel, self.effectiveDateLabel]) let horizontalStackView2 = UIStackView(arrangedSubviews: [typeImageViewWrapper, self.titleLabel]) horizontalStackView2.spacing = 4 let verticalStackView = UIStackView(arrangedSubviews: [horizontalStackView1, horizontalStackView2, self.summaryLabel]) verticalStackView.axis = .vertical verticalStackView.spacing = 4 self.contentView.addSubview(verticalStackView) ... } required init?(coder aDecoder: NSCoder) { fatalError() } } ,以便每个排列的子视图保持其比例。

但是,剩余空间由stackview自动填充。要禁止此操作,您需要在末尾添加一个空视图。此空视图需要较低的内容拥抱优先级,因此它可以增长以填充其他视图按其比例保留的空间。

此外,空视图需要stackview的intrinsicContentSize来计算维度:

label2.setContentHuggingPriority(.defaultLow, for: .horizontal)
label1.setContentHuggingPriority(.defaultHigh, for: .horizontal)

现在设置您安排的子视图并将fillView放在最后

fillProportionally

将stackviews class FillView: UIView { override var intrinsicContentSize: CGSize { get { return CGSize(width: 100, height: 100) } } } 设置为您需要保持子视图之间的距离。

© www.soinside.com 2019 - 2024. All rights reserved.