RedZero9 发表于 2022-2-28 17:54

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

其实本质是通过 .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
页: [1]
查看完整版本: unity Text文本超框在末尾显示“...”