【发布时间】:2018-05-21 16:47:35
【问题描述】:
我正在尝试确定UI.Text 的最大行数,其中VerticalOverflow 设置为truncate,以便以后可以使用行数。到目前为止,我想出了这段代码,这显然是不切实际的,甚至可能是危险的:
/// <summary>
/// Returns the max visible line count of a UI.Text component. The text's vertical
/// overflow must be set to truncate or this method will return 0.
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static int GetMaxLineCount(Text text)
{
if (text == null || text.verticalOverflow != VerticalWrapMode.Truncate) return 0;
var textBackup = text.text;
var lineCount = 0;
text.text = "";
while (true)
{
text.text += "\n";
Canvas.ForceUpdateCanvases();
var nextLineCount = text.cachedTextGenerator.lineCount;
if (lineCount == nextLineCount) break;
lineCount = nextLineCount;
}
text.text = textBackup;
return lineCount;
}
有没有更好的方法来(预先)确定 UI.Text 组件的最大行数(在底部截断文本之前)?
【问题讨论】:
-
几年前我曾经尝试过制作类似的东西,但后来放弃了。我没有再次尝试过,但我现在认为您还需要在计算中考虑 Text 字体的大小。请不要问我怎么做,因为我不知道,但你需要这样做。字体大小、屏幕高度/宽度和文本长度。
-
摸索涉及字体大小的计算已被证明过于不精确。 text.cachedTextGenerator.lineCount 是一个不错的开始,但文本需要在返回最大行数之前用行完全填充。
标签: c# user-interface unity3d text