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())
{
    inputField.GetComponent().rectTransform.anchoredPosition = Vector2.zero;
}

每帧结束强制带有LayoutGroup 组件的父面板进行内部数据重新计算。

LayoutGroup[] layouts = GetComponentsInParent();
for (int i = 0; i < layouts.Length; i++)
{
    LayoutGroup layout = layouts[i];
    RectTransform rect = layout.transform as RectTransform;
    rect.ForceUpdateRectTransforms();
    LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
}

 效果

Unity TMP_InputField 多行输入时的高度适应_第1张图片

你可能感兴趣的:(unity)