首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制UILabel的最大字符

如何限制UILabel的最大字符
EN

Stack Overflow用户
提问于 2022-04-17 03:33:34
回答 1查看 93关注 0票数 0

我想把UILabel.text限制在8个中文单词或16个英文单词中,如果文本大于此,使用“.”以替换多余的位置.

我试着计算字符串的大小,但是我不知道如何处理英文单词和中文单词。因为我用utf8来计算字节,所以中文单词比英文单词多三倍。(考虑到标签上可能同时有中文单词和英文单词,很难计算。)

例如:

1.“蝙蝠侠喜欢猫女和阿尔弗雷德。”应该像“蝙蝠侠像猫.”

2.“蝙蝠侠喜欢猫女和阿福”应该像“蝙蝠侠喜欢猫女和.”

3.“蝙蝠侠喜欢猫女和阿福”应该像“蝙蝠侠喜欢猫女和.”

我知道Android有这样的特性,那Swift呢?

期待您的回复,并为我糟糕的英语描述感到抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-17 04:56:43

您可以迭代计算字符的字符串索引,如果它是is a chinese character add 2,否则可以添加1。如果计数等于16,则返回"…“到当前索引的子字符串。在最后。类似于:

代码语言:javascript
复制
extension Character {
    var isChinese: Bool {
        String(self).range(of: "\\p{Han}", options: .regularExpression) != nil
    }
}

代码语言:javascript
复制
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)
    }
}

代码语言:javascript
复制
"蝙蝠侠喜欢猫女和阿福".limitedLenghtLabelText   // "蝙蝠侠喜欢猫女和…"

"Batman喜欢猫女和阿福".limitedLenghtLabelText  // "Batman喜欢猫女和…"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71899092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档