UGUI强制刷新Layout(布局)组件

不久前接到策划的一个需求,做一个自动适配的显示:不固定文本+不固定按钮+不固定文字,类似于:

HorizontalLayoutGroup布局

对于这种需求,首先想到的就是在父物体上添加HorizontalLayoutGroup组件自动管理子物体的布局,在子物体上添加ContentSizeFitter组件通过内容适配文本的大小!

但代码写出来,文本之间会有重叠,观察发现只要改变父物体或者其中一个子物体的enable,重叠的文本就会显示正常。试着在加载预制之前隐藏子物体,加载完成之后再显示,还是不得不到想要的结果。最后在网上找到了解决方案,使用LayoutRebuilder.ForceRebuildLayoutImmediate(RT)的方法,在加载完成之后调用了一下该方法,问题解决了。

参数RT是带有LayoutGroup组件的RectTransform。

下面是他贴的源码:

今天又遇到类似的问题,并且子物体也会嵌套内容自适应组件。同理,子物体也需要将带有LayoutGroup组件的RectTransform强制重建。

总结:

解决这个问题之后,顺便翻了一下LayoutRebuilder.ForceRebuildLayoutImmediate其他的文章,使用ContentSizeFitter自适应内容来设置RectTransform会在一帧之后生效,如果设置不生效,可以在代码最后调用LayoutRebuilder.ForceRebuildLayoutImmediate来重新绘制Layout。

参考:

雨松MoMo:Unity3D研究院之ContentSizeFitter同步立即响应回调  

腾讯网友:Unity中[VerticalLayoutGroup]及[HorizontalLayoutGroup]动态刷新显示不正常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值