欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 「Unity3D」TextMeshPro的TMP_InputField在改变高度时,其中textComponent移动的问题解决

「Unity3D」TextMeshPro的TMP_InputField在改变高度时,其中textComponent移动的问题解决

2025/11/8 3:43:10 来源:https://blog.csdn.net/tom_221x/article/details/148233649  浏览:    关键词:「Unity3D」TextMeshPro的TMP_InputField在改变高度时,其中textComponent移动的问题解决

如图所示, 在多行模式下,换行会推动textComponent的区域移动,这是无法通过代码(AnchorPositionY)调整的,因为TMP_InputField内部更新,会自动调整这个位移。

第一,多行文本的增与删。

但这就会产生一个问题,如粘贴多行删除多行时,就会导致textComponent的位移——此时,如果没有触发滚动条,就只能使用键盘上下移动来调整,在触摸屏则没有办法调整。

要解决这个问题,可以调用TMP_InputField的一个函数,即public void ProcessEvent(Event e),然后传入KeyCode.PageDown事件,就可以触发一个内置函数private void MovePageDown(bool shift),来直接滚动textComponent到底部。

 this.ProcessEvent(Event.KeyboardEvent("page down"));

第二,动画增加输入高度。

另一种情况,如果使用Tween动画,来动态调整TMP_InputField的高度,即:在OnValueChanged中监测到换行时,动画增加高度。

但动画是一个过程,而OnValueChanged立即返回后,由于文本高度增加,TMP_InputField还没来得及增加,结果就会产生textComponent的位移,导致文本上移不可见。

要解决这个问题,就要既保留动画,也同时增加TMP_InputField高度,使得textComponent不触发移动。

方法就是,增加InputFieldPlus高度,但将TextArea其下移,并同步InputBar(输入区域整体)高度与TextArea上移的动画。

如图所示:

  • OnValueChanged中,增加InputFieldPlus的高度,这样textComponent就不会出现移动。
  • TextArea下移,抵消InputFieldPlus的高度变化。
  • InputBar高度增加动画开启时,同步TextArea上移动画开启,这样视觉上,就是InputBar(输入区域)与其中的文本,一起动画扩展。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词