如何限制Uilabel的最大字符

发布于 2025-01-21 18:00:51 字数 383 浏览 0 评论 0原文

我想限制uilabel.text中的8个中文单词或16个英语单词,如果文本大于此,请使用“ ...”来替换多余的位置。

我试图计算字符串大小,但我不知道如何处理英语单词和中文单词。因为我用utf8来计算字节,所以中文单词比英语单词三重。 (考虑到标签可能具有中文单词和英语单词,这很难计算。)

例如:

1。应该看起来像“蝙蝠侠一样的猫...”

2。

> 3。“蝙蝠侠喜欢猫女和阿福”应该看起来像“蝙蝠侠喜欢猫女和...”

我知道Android有一个财产可以做到这一点,Swift呢?

寻找您的回复,并为我的英语描述不佳而感到抱歉。

I want to limit UILabel.text in 8 Chinese word or 16 English word, and if the text is larger than this, use "..." to replace the redundant place.

I tried to count String size, but I don't know how to deal with both English words and Chinese words. Because is I count bytes by utf8, the Chinese word would be triple than English words. (Considering the label might have both Chinese word and English words, it's hard to calculate.)

for example:

1."Batman like cat Woman and Alfred." should look like "Batman like cat..."

2."蝙蝠侠喜欢猫女和阿福" should look like "蝙蝠侠喜欢猫女和..."

3."Batman喜欢猫女和阿福" should look like "Batman喜欢猫女和..."

I know Android has a property to do this, how about Swift?

Lookingforward for your response, and sorry for my poor English description.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

流年里的时光 2025-01-28 18:00:51

您可以迭代字符串索引计算字符,如果是中文字符等于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喜欢猫女和…"

You can iterate your string indices counting the characters, if it is a chinese character add 2 otherwise add 1. If the count is equal to 16 return the substring up to the current index with "…" at the end. Something like:

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喜欢猫女和…"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文