Space 个字符从字符串末尾删除 - UILabel Swift
Space characters being removed from end of String - UILabel Swift
我在 Swift
中的 Table 视图单元格有以下代码
let rcap = cell.viewWithTag(613) as! UILabel
rcap.text = "Capacity: \(room.capacity) " // I added space at the end
字符串末尾的 space 个字符在屏幕上显示时被删除。
如果我在字符串的开头添加 space 个字符,则没有问题。
目前我正在使用这个 'full stop' hack,但它还不够好:
rcap.text = "Capacity: \(room.capacity) ."
有什么想法吗?
我也试过:
rcap.text = "Capacity: \(room.capacity) " + " "
rcap.text = String.localizedStringWithFormat("Capacity: %@ ", rrom.capacity)
try above code it may works
对我来说,向标签添加约束似乎是更好的解决方案。
它允许您在标签和标签之间定义明确的距离
table 视图单元格的边距。
space 的宽度取决于字体,如果标签中的文本收缩,甚至可能会发生变化,导致
table 查看。
话虽如此,您可以防止尾随 space
通过附加 "ZERO WIDTH NON-JOINER" 字符 (U+200C) 删除:
rcap.text = "Capacity: \(room.capacity) \u{200c}"
但我认为这更像是 "trick" 而不是解决问题的正确方法
问题。
更新: 看来这个"trick"在iOS 10中不能用了,
因此应按照最初的建议改用布局约束。
2020 年
在使用 monospaced 字体和进行布局时,这个问题很严重,例如,用户代码可能在 monospace 末尾对齐 spaces ].
\u{200c} 似乎工作得很好:
请注意,@MartinR 的解决方案实际上非常有效,今天,2020 A.D。,iOS 13,Xcode 11.
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
您现在可以完全正常地设置字体大小等,并且一切正常。
奖金代码示例!
这里有一个简单的 UILabel 可以填充它,因此您无需执行任何其他操作:
class PaddyLabel: UILabel {
// pad always to 20 characters...
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
并且不必费心手动添加所需的 space。
请注意,即使您不使用单声道space 字体,一个典型的现实世界用例是当您想要“堆在一起”UILabels - 想象一下比如说,它们每个都是一个词 - 并且无论字体大小等如何,它们之间都有绝对正确的 space,也就是说,就好像它只是一个 UILabel 中的一个句子。
只有实际做到这一点的方法是让 UILabel“实际包含 space”。
如果以后不行了iOS...
也许这会(再次?)在未来崩溃 iOS。
我知道的唯一其他解决方案是这个。首先,仅向 UILabel 添加填充非常困难。在这里解释:
手动向 UILabel 添加填充?
How to actually reliably add damned padding to a UILabel
事实上,使用类似的技术,可以使用 intrinsicContentSize
、drawText
和 textRect
在一端强制增加额外的宽度。要知道要添加多少宽度,您必须使用虚拟示例文本以及相关字符数来计算。进行该计算将需要使用通常烦人的技术来计算可能的文本呈现大小。但是因为这很糟糕,幸运的是我们可以使用@MartinR 的惊人提示(像往常一样!)
我已经为 UILabel
创建了自定义 class,看看:
import UIKit
@IBDesignable class CustomLable: UILabel {
@IBInspectable var topInset: CGFloat = 5.0
@IBInspectable var bottomInset: CGFloat = 5.0
@IBInspectable var leftInset: CGFloat = 7.0
@IBInspectable var rightInset: CGFloat = 7.0
override func drawText(in rect: CGRect) {
let insets = UIEdgeInsets.init(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
super.drawText(in: rect.inset(by: insets))
}
override var intrinsicContentSize: CGSize {
let size = super.intrinsicContentSize
return CGSize(width: size.width + leftInset + rightInset,
height: size.height + topInset + bottomInset)
}
}
您可以将 class 从 Storyboard
分配给 UILabel
并提供您需要的 space。
尝试使用零宽度 space 而不是句点。可以用左Alt和0173在数字键盘上书写。或者您可以在此处复制并删除引号:""
因此您设置文本的代码将如下所示(末尾为零宽度 space):
rcap.text = "Capacity: \(room.capacity) "
不间断 space (\u{00a0}
) 也应该有效,其用法与 Martin 和 Fattie 的回答
中的 \u{200c}
相同
我在 Swift
中的 Table 视图单元格有以下代码let rcap = cell.viewWithTag(613) as! UILabel
rcap.text = "Capacity: \(room.capacity) " // I added space at the end
字符串末尾的 space 个字符在屏幕上显示时被删除。
如果我在字符串的开头添加 space 个字符,则没有问题。
目前我正在使用这个 'full stop' hack,但它还不够好:
rcap.text = "Capacity: \(room.capacity) ."
有什么想法吗?
我也试过:
rcap.text = "Capacity: \(room.capacity) " + " "
rcap.text = String.localizedStringWithFormat("Capacity: %@ ", rrom.capacity)
try above code it may works
对我来说,向标签添加约束似乎是更好的解决方案。 它允许您在标签和标签之间定义明确的距离 table 视图单元格的边距。 space 的宽度取决于字体,如果标签中的文本收缩,甚至可能会发生变化,导致 table 查看。
话虽如此,您可以防止尾随 space 通过附加 "ZERO WIDTH NON-JOINER" 字符 (U+200C) 删除:
rcap.text = "Capacity: \(room.capacity) \u{200c}"
但我认为这更像是 "trick" 而不是解决问题的正确方法 问题。
更新: 看来这个"trick"在iOS 10中不能用了, 因此应按照最初的建议改用布局约束。
2020 年
在使用 monospaced 字体和进行布局时,这个问题很严重,例如,用户代码可能在 monospace 末尾对齐 spaces ].
\u{200c} 似乎工作得很好:
请注意,@MartinR 的解决方案实际上非常有效,今天,2020 A.D。,iOS 13,Xcode 11.
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"
您现在可以完全正常地设置字体大小等,并且一切正常。
奖金代码示例!
这里有一个简单的 UILabel 可以填充它,因此您无需执行任何其他操作:
class PaddyLabel: UILabel {
// pad always to 20 characters...
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
并且不必费心手动添加所需的 space。
请注意,即使您不使用单声道space 字体,一个典型的现实世界用例是当您想要“堆在一起”UILabels - 想象一下比如说,它们每个都是一个词 - 并且无论字体大小等如何,它们之间都有绝对正确的 space,也就是说,就好像它只是一个 UILabel 中的一个句子。
只有实际做到这一点的方法是让 UILabel“实际包含 space”。
如果以后不行了iOS...
也许这会(再次?)在未来崩溃 iOS。
我知道的唯一其他解决方案是这个。首先,仅向 UILabel 添加填充非常困难。在这里解释:
手动向 UILabel 添加填充?
How to actually reliably add damned padding to a UILabel
事实上,使用类似的技术,可以使用 intrinsicContentSize
、drawText
和 textRect
在一端强制增加额外的宽度。要知道要添加多少宽度,您必须使用虚拟示例文本以及相关字符数来计算。进行该计算将需要使用通常烦人的技术来计算可能的文本呈现大小。但是因为这很糟糕,幸运的是我们可以使用@MartinR 的惊人提示(像往常一样!)
我已经为 UILabel
创建了自定义 class,看看:
import UIKit
@IBDesignable class CustomLable: UILabel {
@IBInspectable var topInset: CGFloat = 5.0
@IBInspectable var bottomInset: CGFloat = 5.0
@IBInspectable var leftInset: CGFloat = 7.0
@IBInspectable var rightInset: CGFloat = 7.0
override func drawText(in rect: CGRect) {
let insets = UIEdgeInsets.init(top: topInset, left: leftInset, bottom: bottomInset, right: rightInset)
super.drawText(in: rect.inset(by: insets))
}
override var intrinsicContentSize: CGSize {
let size = super.intrinsicContentSize
return CGSize(width: size.width + leftInset + rightInset,
height: size.height + topInset + bottomInset)
}
}
您可以将 class 从 Storyboard
分配给 UILabel
并提供您需要的 space。
尝试使用零宽度 space 而不是句点。可以用左Alt和0173在数字键盘上书写。或者您可以在此处复制并删除引号:""
因此您设置文本的代码将如下所示(末尾为零宽度 space):
rcap.text = "Capacity: \(room.capacity) "
不间断 space (\u{00a0}
) 也应该有效,其用法与 Martin 和 Fattie 的回答
\u{200c}
相同