Unity TMP_InputField 多行输入时的高度适应
实现
设定输入框的行类型为多行新建行。
inputField.lineType = TMP_InputField.LineType.MultiLineNewline;
进行输入时调整输入框高度。
height = inputField.textComponent.preferredHeight + offset;
if (height <= minHeight)
{
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, minHeight);
}
else
{
rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, height);
}
*offset 为Text Area 与 InputField (TMP) 的高度差,默认高度差通常为13。
更新Text Component 和Caret 位置。
inputField.textComponent.rectTransform.anchoredPosition = Vector2.zero;
if (inputField.GetComponent<TMP_SelectionCaret>())
{
inputField.GetComponent<TMP_SelectionCaret>().rectTransform.anchoredPosition = Vector2.zero;
}
每帧结束强制带有LayoutGroup 组件的父面板进行内部数据重新计算。
LayoutGroup[] layouts = GetComponentsInParent<LayoutGroup>();
for (int i = 0; i < layouts.Length; i++)
{
LayoutGroup layout = layouts[i];
RectTransform rect = layout.transform as RectTransform;
rect.ForceUpdateRectTransforms();
LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
}