【发布时间】:2021-10-01 23:26:04
【问题描述】:
我正在尝试在垂直 UIStackView 中包含一系列 UITextFields,以及相应的 UILabel。我将每个标签/字段对嵌套在水平 UIStackView 中,标签的宽度被硬编码为所有标签的最宽固有宽度,以便它们很好地排列。
它几乎可以正常工作,但水平堆栈视图的间距并不像预期的那样均匀(间距 = 5),而是成束并重叠。
但是,如果我删除 hFieldStack.alignment = .lastBaseline 行,那么一切都会完美。
我可以删除该行,因为它看起来不错。但我只是好奇为什么在嵌套堆栈视图中使用 lastBaseline 对齐时,外部堆栈视图中的间距不起作用。
stackView.axis = .vertical
stackView.spacing = 5
stackView.layoutMargins = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)
stackView.isLayoutMarginsRelativeArrangement = true
if let titleLabel = titleLabel {
stackView.addArrangedSubview(titleLabel)
}
if let messageLabel = messageLabel {
stackView.addArrangedSubview(messageLabel)
}
if textFields.count == fieldLabels.count {
for i in 0..<textFields.count {
fieldLabels[i].widthAnchor.constraint(equalToConstant: 80).isActive = true
let hFieldStack = UIStackView()
hFieldStack.translatesAutoresizingMaskIntoConstraints = false
hFieldStack.axis = .horizontal
hFieldStack.alignment = .lastBaseline
hFieldStack.spacing = 5
hFieldStack.layoutMargins = UIEdgeInsets(top: 0, left: 10, bottom: 0, right: 10)
hFieldStack.isLayoutMarginsRelativeArrangement = true
hFieldStack.addArrangedSubview(fieldLabels[i])
hFieldStack.addArrangedSubview(textFields[i])
stackView.addArrangedSubview(hFieldStack)
}
} else {
logger.error("Field count doesn't match label count")
}
【问题讨论】:
标签: swift nested alignment uistackview spacing