找回密码
 立即注册
查看: 388|回复: 0

unity Text文本超框在末尾显示“...”

[复制链接]
发表于 2022-2-28 17:54 | 显示全部楼层 |阅读模式
其实本质是通过 .characterCountVisible 参数来获取显示出来的字符串长度,和实际要显示的文字字符串长度的比较,超过长度的话,最后的字符替换成“...”

image.png

    需要注意一点,因为编码方式的不同,在使用 UTF-8 字符编码的情况下,一个中文字符一般占 3 个字节。实际上“测试文本”的string.len()结果是12,但是 .characterCountVisible取出来的结果是4.所以需要进行一次转换function TasksTopTipsView:SetTextWithEllipsis(text, rect, value)    local generator = CS.UnityEngine.TextGenerator()    local settings = text:GetGenerationSettings(rect.size)    generator:Populate(value, settings)    local characterCountVisible = generator.characterCountVisible    if string.utf8len(value) ~= string.len(value) then        characterCountVisible = characterCountVisible*3    end    if string.len(value) > characterCountVisible then        text.text = string.sub(value, 0, characterCountVisible - 3) .. "..."    else        text.text = value    endend--计算 UTF8 字符串的长度,每一个中文算一个字符function string.utf8len(input)    local len  = string.len(input)    local left = len    local cnt  = 0    local arr  = {0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc}    while left ~= 0 do        local tmp = string.byte(input, -left)        local i   = #arr        while arr do            if tmp >= arr then                left = left - i                break            end            i = i - 1        end        cnt = cnt + 1    end    return cntend

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-22 17:32 , Processed in 0.137505 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表