在Unity中,InputField在我们输入内容时,只会显示适应初始宽度的最新内容,或者自定义长度内容。
那么,要实现宽度自适应内容就需要另寻他法了。
以下是通过一个控制脚本来实现的一个简单方法。
直接上脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class DynamicInputFieldSize : MonoBehaviour
{
public TMP_InputField inputField;
public RectTransform inputFieldRect;
private float initialWidth;
private float characterWidth = 20f;
void Start()
{
// 获取输入框的初始宽度
initialWidth = inputFieldRect.sizeDelta.x;
// 监听输入框文本变化事件
inputField.onValueChanged.AddListener(OnInputValueChanged);
}
void OnInputValueChanged(string text)
{
// 设置输入框文本内容
inputField.text = text;
// 获取文本的预期宽度
TMP_Text textComponent = inputField.textComponent;
float minWidth = textComponent.GetPreferredValues(text).x + characterWidth;
// 判断文本内容是否超过初始宽度
if (minWidth > initialWidth)
{
// 调整输入框的宽度
inputFieldRect.sizeDelta = new Vector2(minWidth, inputFieldRect.sizeDelta.y);
}
else
{
// 将输入框宽度恢复为初始宽度
inputFieldRect.sizeDelta = new Vector2(initialWidth, inputFieldRect.sizeDelta.y);
}
}
}
该控制脚本的方法原理很简单,就是通过获取文本长度,然后调整输入框的宽度来实现。
效果:
Unity InputField宽度自适应内容