2020年之前
当使用等宽字体并进行布局时,例如用户代码,在等宽字体中可能在末尾有对齐的空格时,此问题非常关键。
\u{200c} 确实完美地工作:
请注意,@MartinR的解决方案确实完美地工作,截至今天,即2020年,iOS 13,Xcode 11。
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
![enter image description here](https://istack.dev59.com/Gus3V.webp)
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
![enter image description here](https://istack.dev59.com/MCAlW.webp)
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
![在此输入图片描述](https://istack.dev59.com/NErCR.webp)
您现在可以完全正常地设置字体大小等,一切都可以正常运行。
奖励代码示例!
这是一个简单的UILabel,可以填充它,因此您无需执行其他操作:
class PaddyLabel: UILabel {
override var text: String? {
get {
return super.text
}
set {
if newValue == nil {
super.text = nil
return
}
var t = newValue!
while t.count < 20 { t += " " }
t += "\u{200c}"
super.text = t
}
}
因此,在上面三个黄色示例中,您只需要执行此操作
.text = "FATTIE KODE " + reservation
请注意,即使您不使用等宽字体,一个典型的实际用例是当您想要“堆叠”UILabel时,比如说每个标签只有一个单词,并且无论字体大小如何都有绝对正确的空间,也就是说,就像在一个UILabel中只有一个句子。
唯一实现这一点的方法是让UILabel“实际包括空格”。
如果在未来iOS版本中无法正常工作...
也许将来的iOS版本中(再次)会出现问题。
我所知道的唯一其他解决方案是这样的。首先,仅仅给UILabel添加填充是非常困难的。这里有解释:
手动向UILabel添加填充?
如何可靠地为UILabel添加填充
实际上,使用类似的技术,可以使用intrinsicContentSize、drawText和textRect在一端强制增加额外的宽度。要知道要添加多少宽度,您需要使用示例文本进行计算,并考虑问题中的字符数。进行该计算需要使用通常令人烦恼的技术来计算可能的文本呈现大小。但是因为这很烦人,所以幸运的是我们可以使用@MartinR(像往常一样!)的神奇提示。
\t
可以工作,但只有少量的空间。 - Bhavin Bhadani