如何限制 UILabel 的最大字符数

How to limit UILabel's max characters

我想限制UILabel.text在8个中文单词或16个英文单词,如果文字大于这个,用"..."替换多余的地方。

我试着统计String的大小,但是我不知道如何同时处理英文单词和中文单词。因为我是用utf8来计算字节的,所以中文单词会是英文单词的三倍。 (考虑到label可能既有中文单词也有英文单词,计算起来比较麻烦。)

例如:

1.“蝙蝠侠喜欢猫女和阿尔弗雷德。”应该看起来像“像猫一样的蝙蝠侠......”

2."蝙蝠侠喜欢猫女和阿福"应该是"蝙蝠侠喜欢猫女和..."

3."蝙蝠侠喜欢猫女和阿福"应该看起来像"蝙蝠侠喜欢猫女和..."

我知道 Android 有一个 属性 可以做到这一点,Swift 怎么样?

期待您的回复,对于我糟糕的英文描述深表歉意。

你可以迭代你的字符串索引来计算字符,如果它 加 2 否则加 1。如果计数等于 16 return 子字符串到当前索引与“...... “ 在末尾。类似于:

extension Character {
    var isChinese: Bool {
        String(self).range(of: "\p{Han}", options: .regularExpression) != nil
    }
}

extension StringProtocol {
    var limitedLenghtLabelText: String {
        var count = 0
        for index in indices {
            count += self[index].isChinese ? 2 : 1
            if count == 16 {
                let upperBound = self.index(after: index)
                return String(self[..<upperBound]) + (upperBound < endIndex ? "…" : "") }
        }
        return String(self)
    }
}

"蝙蝠侠喜欢猫女和阿福".limitedLenghtLabelText   // "蝙蝠侠喜欢猫女和…"

"Batman喜欢猫女和阿福".limitedLenghtLabelText  // "Batman喜欢猫女和…"