59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using static UnityEngine.Rendering.DebugUI;
|
||
|
||
[RequireComponent(typeof(InputField))]
|
||
public class AutoExpandInputField : MonoBehaviour
|
||
{
|
||
private InputField inputField;
|
||
private Text inputText;
|
||
//private ContentSizeFitter contentSizeFitter;
|
||
//private LayoutElement layoutElement;
|
||
private RectTransform rectTransform;
|
||
private void Awake()
|
||
{
|
||
inputField = GetComponent<InputField>();
|
||
inputText = inputField.textComponent;
|
||
//contentSizeFitter = GetComponent<ContentSizeFitter>();
|
||
//layoutElement = GetComponent<LayoutElement>();
|
||
rectTransform = GetComponent<RectTransform>();
|
||
// 监听输入内容变化事件,当输入框文字改变时触发扩容检查
|
||
inputField.onValueChanged.AddListener(OnValueChanged);
|
||
}
|
||
//private void OnEnable()
|
||
//{
|
||
// layoutElement.preferredHeight = layoutElement.minHeight;
|
||
// rectTransform.anchoredPosition = new Vector2 (-158.9837f, -67.5f);
|
||
//}
|
||
//private void Update()
|
||
//{
|
||
// Canvas.ForceUpdateCanvases();
|
||
// // 获取文本实际需要的高度
|
||
// float requiredHeight = inputText.flexibleHeight;
|
||
// // 若有LayoutElement组件,利用其最小高度限制,同时更新首选高度
|
||
// if (layoutElement != null)
|
||
// {
|
||
// // 确保计算出的高度不小于设置的最小高度
|
||
// requiredHeight = Mathf.Max(requiredHeight, layoutElement.minHeight);
|
||
// layoutElement.flexibleHeight = requiredHeight;
|
||
// }
|
||
// else
|
||
// {
|
||
// // 没有LayoutElement时,直接基于ContentSizeFitter和文本需求调整高度(实际项目中一般都会有LayoutElement配合,这里做兼容处理)
|
||
// rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, requiredHeight);
|
||
// }
|
||
|
||
// // 触发布局重新计算,让ContentSizeFitter等生效,更新实际显示
|
||
// if (contentSizeFitter != null)
|
||
// {
|
||
// contentSizeFitter.SetLayoutVertical();
|
||
// }
|
||
//}
|
||
|
||
void OnValueChanged(string text)
|
||
{
|
||
// 计算文本内容的高度
|
||
int preferredHeight = Mathf.CeilToInt(inputField.textComponent.preferredHeight) + 20; // 20是上下边距
|
||
rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, preferredHeight);
|
||
}
|
||
} |