关于半截字的问题

03/01306 浏览综合
问题定位
截图中可以看到,金色正常文字之间夹杂着"半截字"行——文字只露出上半部分或下半部分,像被水平线截断了。
核心原因在 Label.lua 的 多行文本自动高度机制存在时序问题。为什么"部分机型"才出现
这不是单纯的首帧闪烁问题,还涉及以下因素:
DPR 缩放导致宽度不稳定:不同设备的 DPR(如 2.75、3.0、3.5)会导致百分比宽度(width = "100%")在前几帧解析出不同的像素值。Label 的高度缓存条件是 contentW ~= self.lastMultilineWidth_,如果宽度在两帧间发生微小变化,高度会重新计算,但裁剪始终滞后一帧。
math.ceil 舍入差异:newHeight = math.ceil(textH) + pt + pb,不同 DPR 下 nvgTextBoxBounds 返回的 textH 存在小数差异,ceil 后可能刚好差 1-2px,触发 math.abs(newHeight - l.h) > 1 的边界条件。
布局传播延迟:Widget.SetHeight 调用 Yoga 重新布局,但本帧的 GetAbsoluteLayout() 已经取过了,要到下一帧才生效。如果 ScrollView 在中间又触发了一次布局(比如滚动事件),可能造成持续性的高度不一致。
目前采用方案“给 Label 添加底部 padding 作为缓冲
在每个叙事 Label 上加一点 paddingBottom,让裁剪区域比文本实际需要的高度大一些,规避首帧裁剪问题。”
不确定会不会导致新问题。
但是将就用吧。
预计一个小时后,你们右上角三个点重新进入游戏就可以解决
猜你想搜
我不想背主 半截字问题
6
11