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

事实上,使用类似的技术,可以使用 intrinsicContentSizedrawTexttextRect 在一端强制增加额外的宽度。要知道要添加多少宽度,您必须使用虚拟示例文本以及相关字符数来计算。进行该计算将需要使用通常烦人的技术来计算可能的文本呈现大小。但是因为这很糟糕,幸运的是我们可以使用@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 而不是句点。可以用左Alt0173在数字键盘上书写。或者您可以在此处复制并删除引号:"­"

因此您设置文本的代码将如下所示(末尾为零宽度 space):
rcap.text = "Capacity: \(room.capacity) ­"
不间断 space (\u{00a0}) 也应该有效,其用法与 Martin 和 Fattie 的回答

中的 \u{200c} 相同