我在
UILabels
中使用 UITableViewCell
我的代码如下,我不知道为什么它会给出填充?
cell.lbl1.text = "Name - "
cell.lbl2.text = "Class - "
cell.lbl3.text = "Reason - "
我正在寻找与之前的文本保持一致的间距
"-"
您假设每个字符的宽度相同。这仅适用于等宽字体。您可以使用
UIFont.monospacedSystemFont
: 获取默认等宽字体
cell.lbl1.font = UIFont.monospacedSystemFont(ofSize: UIFont.systemFontSize, weight: .regular)
如果您不想更改字体,一个简单的解决方案是将“-”字符放入另一个
UILabel
中。这样,您可以将左侧的所有标签限制为具有相同的宽度,并且“-”标签将位于它们的右侧。
使用
UIStackView
s 执行此操作的示例:
func makeLabel(_ text: String) -> UILabel {
let label = UILabel()
label.text = text
label.font = UIFont.monospacedSystemFont(ofSize: UIFont.systemFontSize, weight: .regular)
return label
}
func makeHStack(_ text: String) -> UIStackView {
let stackView = UIStackView(arrangedSubviews: [makeLabel(text), makeLabel("-")])
stackView.axis = .horizontal
NSLayoutConstraint.activate([
// freely adjust this 0.4 ratio
stackView.arrangedSubviews[0].widthAnchor.constraint(equalTo: stackView.widthAnchor, multiplier: 0.4)
// making the width equal to a constant is also an option
])
return stackView
}
// constructing the 3 rows and placing them into a superview
let vstack = UIStackView(arrangedSubviews: [makeHStack("Name"), makeHStack("Class"), makeHStack("Reason")])
vstack.axis = .vertical
view.addSubview(vstack)
vstack.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
vstack.widthAnchor.constraint(equalTo: view.widthAnchor),
vstack.centerXAnchor.constraint(equalTo: view.centerXAnchor),
vstack.centerYAnchor.constraint(equalTo: view.centerYAnchor),
])