前言
开发中遇到了需要支持滚动适配的输入框,输入框大小固定,根据输入内容实现可滑动显示,并能够自动显示隐藏滑动条
解决方法
InputField内嵌ScrollView
Content节点:水平自适应组件、垂直布局组件
Text节点:
挂在Content下,用于ScrollView感知高度
同时也是指定给InputField的Text
挂载LayoutElement,动态计算文本高度,设置preferredHeight,以此设定文本的实际高度
FormatText节点
挂在Content Size Fitter 打开垂直自适应
每次InputField.Text内容改变时,同步到FormatText,然后FormatText通过自适应高度,代码中获取preferredHeight,然后将此preferredHeight赋值给InputField.Text.preferredHeight,以此得到文本的实际高度
private void FormatInputHeight(string textValue)
{
m_FormatText.text = value;
m_FormatText.GetComponent<ContentSizeFitter>().SetLayoutVertical();//立即生效
var height = m_FormatText.preferredHeight;
m_InputField_Text.GetComponent<LayoutElement>().preferredHeight = height;
}
关于只有当内容范围触发滑动条的时候才能滑动:
每帧监听:
m_InputField_Scroll.vertical = m_InputField_Scroll.verticalScrollbar.gameObject.activeSelf;
if (!m_MainIPF_Scroll.vertical)
{
m_MainIPF_Scroll.verticalNormalizedPosition = 1;
}