如何获取TextMeshPro UI文本控件包含自动换行的实际显示行数?
TextMeshPro UGUI 控件获取实际显示行数解决方案
你之前使用Split('\n')统计行数的方案仅能识别手动插入的硬换行符,无法统计因宽度限制触发的自动换行行数,直接使用TextMeshPro内置的textInfo属性即可拿到包含所有换行类型的实际总显示行数。
核心实现代码
public TextMeshProUGUI commentaryText; // 建议放在LateUpdate中调用,确保文本布局已完成更新 void LateUpdate() { int actualDisplayLines = commentaryText.textInfo.lineCount; Debug.Log("实际显示行数:" + actualDisplayLines); }
常见踩坑说明
- 若刚给
commentaryText.text赋值就需要立即读取行数,此时TextMeshPro还未完成布局计算,拿到的会是上一帧的旧值,需要先强制刷新布局再读取:
commentaryText.text = "新赋值的长文本内容"; // 强制立即更新文本布局和网格数据 commentaryText.ForceMeshUpdate(); int lineCount = commentaryText.textInfo.lineCount; Debug.Log("赋值后的实际行数:" + lineCount);
- 上述
lineCount返回的是全部文本的总行数,如果你使用了Mask、ScrollRect等控件导致部分行被裁切不可见,需要单独计算行坐标和可视区域的交集,才能得到当前可视范围内的行数。
内容的提问来源于stack exchange,提问作者user8810083
相关产品推荐
相关产品推荐

