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

gstyhher  于 2023-11-16  发布在  Swift
关注(0)|答案(2)|浏览(111)

我在UITableViewCell中使用UILabels我的代码在下面,我不知道为什么它会有填充?

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

字符串


的数据
我正在寻找一致的间距从文本之前"-"

wgmfuz8q

wgmfuz8q1#

你假设每个字符的宽度相等。这只适用于等宽字体。你可以使用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),
])

2hh7jdfx

2hh7jdfx2#

有一个简单的解决方案-用制表符代替空格。不需要等宽字体或堆栈视图。
开始:

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

字符串
根据字体的不同,你可能需要更多或更少的\t(制表符)字符才能让它排成一行。

相关问题