从String的末尾移除空间 - UILabel Swift

时间:2015-07-21 09:05:55

标签: ios string swift whitespace

我在Swift中有一个Table View Cell的代码

    let rcap = cell.viewWithTag(613) as! UILabel
    rcap.text = "Capacity: \(room.capacity)  "  // I added space at the end

屏幕上显示时,空格将被移除。

如果我在String的开头添加空格,则没有问题。

目前我正在使用这种“完全停止”黑客攻击,但这还不够好:

rcap.text = "Capacity: \(room.capacity)   ."  

有什么想法吗?

我也尝试过:

rcap.text = "Capacity: \(room.capacity)  " + " "

6 个答案:

答案 0 :(得分:32)

为标签添加约束对我来说似乎是更好的解决方案。 它允许您定义标签和之间明确定义的距离 表格视图单元格的边距。 空格的宽度取决于字体,如果标签中的文本缩小,甚至可能会更改,导致文本中的未对齐文本 表格视图。

话虽如此,你可以防止尾随空间 通过附加“ZERO WIDTH NON-JOINER”字符(U + 200C)删除:

int x = random.nextInt(Game.WD - 200) + 100;
int y;  
int HEIGHT = 10;
int WIDTH = Game.WD - x;
int gap = 100;

public void paint(Graphics g){
    g.drawRect(x, y, WIDTH , HEIGHT); //right part
    g.drawRect(-x, y, (Game.WD - gap)  , HEIGHT); //left part

但我认为这更像是一个“技巧”,而不是正确的解决方案 问题

更新:似乎这个“技巧”在iOS 10中不再起作用了, 所以应该使用布局约束,如最初建议的那样。

答案 1 :(得分:3)

对于2020

在使用等宽字体并进行布局时,例如在可能在等宽字符末尾具有对齐空间的用户代码之类的情况下,此问题至关重要。

\ u {200c}看起来确实不错:

请注意, @MartinR的解决方案确实运行完美,今天,即公元2020年,iOS 13,Xcode 11。

def tabellina(n):
    return [n*i for i in range(11)]

enter image description here

.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"

enter image description here

.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"

enter image description here

您现在可以绝对正常地设置字体大小等,并且一切正常。


奖金代码示例!

这里是一个简单的UILabel,可以对其进行填充,因此您无需执行其他任何操作:

.text = "FATTIE KODE " + reservation + reservation.neededTrailingSpaces + \u{200c}"

因此,在上面的三个黄色示例中,您只需这样做

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
        }
    }

不必手动添加所需的空格。


请注意,即使您没有使用等宽字体,一个典型的实际用例是您想要“堆放” UILabels -假设它们每个都说一个字,并且无论字体大小如何,它们之间都有绝对正确的空间,也就是说,就好像它只是一个UILabel中的一句话。

的方法是让UILabel“实际上包含空格”。


如果在以后的iOS中不起作用...

也许这将(再次?)在将来的iOS中失效。

我知道的唯一其他解决方案是这个。首先,仅向UILabel添加填充非常荒谬。解释如下:

将填充手动添加到UILabel吗?

How to actually reliably add damned padding to a UILabel

实际上,使用类似的技术,可以使用.text = "FATTIE KODE " + reservation intrinsicContentSizedrawText在一端强制额外的宽度。要知道要添加多少宽度,您必须使用幻像示例文本以及相关字符数来计算宽度。进行该计算将需要通常烦人的技术来计算可能的文本呈现大小。但这很糟糕,幸运的是,我们可以使用@MartinR的惊人技巧(照常!)

答案 2 :(得分:1)

请尝试使用零宽度的空格而不是句点。可以使用数字键盘上的左 Alt 0173 来编写。或者,您可以在此处复制并删除引号:"­"

因此,用于设置文本的代码将如下所示(结尾处为零宽度):
rcap.text = "Capacity: \(room.capacity) ­"
不间断空格(\u{00a0})也应该起作用,其用法与Martin和Fattie的答案中的\u{200c}一样

答案 3 :(得分:-1)

rcap.text = String.localizedStringWithFormat("Capacity: %@ ", rrom.capacity)
  

尝试以上代码可能有效

答案 4 :(得分:-1)

对不起,我认为您可以将其转换为swift。

请迅速参考:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 20))
let str = NSMutableAttributedString(string: String(format: " %@ .", yourString))

str.addAttribute(.foregroundColor, value: label.backgroundColor as Any, range: NSRange(".")!)

label.attributedText = str

答案 5 :(得分:-2)

NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@“%@。”,numString]];

[str addAttributes:@{ NSForegroundColorAttributeName : label.backgroundColor } range:[str.string rangeOfString:@"."]];

label.attributedText = str;