我是iOS开发的新手,我对如何实现这一点感到困惑。
我有2个UILabel
s添加到UIStackView
像这样:
let horizontalStackView1 = UIStackView(arrangedSubviews: [self.label1, self.label2])
当我运行应用程序时,它看起来像这样:
我试过设置qazxsw poi,qazxsw poi等没有运气。
我该如何实现这一目标?
提前致谢!
更新:
代码看起来像这样(顺便说一下它是表格的一个单元格):
horizontalStackView1.distribution
这是因为UIStackView选择具有最低内容拥抱优先级的第一个ArrangeSubview并调整其大小,以便stackview的内容占据全宽。
如果您想在这种情况下使用UIStackView,您可以更改内容拥抱优先级,例如。
horizontalStackView1.alignment
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) }
}
}
设置为您需要保持子视图之间的距离。