我想把UILabel.text限制在8个中文单词或16个英文单词中,如果文本大于此,使用“.”以替换多余的位置.
我试着计算字符串的大小,但是我不知道如何处理英文单词和中文单词。因为我用utf8来计算字节,所以中文单词比英文单词多三倍。(考虑到标签上可能同时有中文单词和英文单词,很难计算。)
例如:
1.“蝙蝠侠喜欢猫女和阿尔弗雷德。”应该像“蝙蝠侠像猫.”
2.“蝙蝠侠喜欢猫女和阿福”应该像“蝙蝠侠喜欢猫女和.”
3.“蝙蝠侠喜欢猫女和阿福”应该像“蝙蝠侠喜欢猫女和.”
我知道Android有这样的特性,那Swift呢?
期待您的回复,并为我糟糕的英语描述感到抱歉。
发布于 2022-04-17 04:56:43
您可以迭代计算字符的字符串索引,如果它是is a chinese character add 2,否则可以添加1。如果计数等于16,则返回"…“到当前索引的子字符串。在最后。类似于:
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喜欢猫女和…"https://stackoverflow.com/questions/71899092
复制相似问题