不久前接到策划的一个需求,做一个自动适配的显示:不固定文本+不固定按钮+不固定文字,类似于:
对于这种需求,首先想到的就是在父物体上添加HorizontalLayoutGroup组件自动管理子物体的布局,在子物体上添加ContentSizeFitter组件通过内容适配文本的大小!
但代码写出来,文本之间会有重叠,观察发现只要改变父物体或者其中一个子物体的enable,重叠的文本就会显示正常。试着在加载预制之前隐藏子物体,加载完成之后再显示,还是不得不到想要的结果。最后在网上找到了解决方案,使用LayoutRebuilder.ForceRebuildLayoutImmediate(RT)的方法,在加载完成之后调用了一下该方法,问题解决了。
参数RT是带有LayoutGroup组件的RectTransform。
下面是他贴的源码:
今天又遇到类似的问题,并且子物体也会嵌套内容自适应组件。同理,子物体也需要将带有LayoutGroup组件的RectTransform强制重建。
总结:
解决这个问题之后,顺便翻了一下LayoutRebuilder.ForceRebuildLayoutImmediate其他的文章,使用ContentSizeFitter自适应内容来设置RectTransform会在一帧之后生效,如果设置不生效,可以在代码最后调用LayoutRebuilder.ForceRebuildLayoutImmediate来重新绘制Layout。
参考:
雨松MoMo:Unity3D研究院之ContentSizeFitter同步立即响应回调
腾讯网友:Unity中[VerticalLayoutGroup]及[HorizontalLayoutGroup]动态刷新显示不正常