各种layout,contentSizeFitter,修改了子UI后都不立刻刷新,总之就是需要自己手动刷新,网上找到了方法,也在lua项目中实现了
LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform) lua: CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.panel.transform:Find("Bg"):GetComponent("RectTransform"))
-----------2022.11.22---------
今天不知道为什么,在某些情况下不好用了,但突然发现隐藏显示后UI会重排成正确的样子
所以利用协程把上面的方法改成了,
SetActive(true) WaitForEndOfFrame() SetActive(false) WaitForEndOfFrame()
完美解决
-----------2022.11.23---------
又出问题了,我做的是一个加分气泡,气泡会随着气泡内文字长度而自适应大小,同时气泡还有左右对齐的需求,修改文字时会出现气泡变宽从而越过边界的问题,再次展示位置则回归正常
我发现在UI组件在当前帧结束前可见,即ActiveSelf==true的情况下,在本帧修改UI内容,下一帧会自动更新布局
而在当前帧结束前不可见,ActiveSelf==false的情况下更新了,再SetActive(true)打开,并不会刷新布局
所以在修改之前先使其可见,修改自适应内容后,暂停一帧再关闭,即可解决UI内容不刷新问题
-----------2023.04.27---------
补充:有些手机设备性能比较差,暂停一帧不够,需要暂停两帧