为什么 UILabel 在 swift 中提供额外的填充?

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

我在

UILabels
中使用
UITableViewCell
我的代码如下,我不知道为什么它会给出填充?

  cell.lbl1.text = "Name            - " 
  cell.lbl2.text = "Class           - " 
  cell.lbl3.text = "Reason          - " 

我正在寻找与之前的文本保持一致的间距

"-"

ios swift uikit uilabel
1个回答
1
投票

您假设每个字符的宽度相同。这仅适用于等宽字体。您可以使用

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),
])
© www.soinside.com 2019 - 2024. All rights reserved.