来自于:Lumious
    UGUI的Layout布局组件确实节省了我们很多代码
    如果不使用Layout组件
    那么光在计算UI的布局上就要花费很大的功夫
    特别是动态生成其组件的时候

    当然,Layout组件在大多数时候是非常好用的
    也有让人头疼的时候
    比如,一个组件内需要展开或者折叠
    UGUI强制刷新Layout(布局)组件 - 图1
    UGUI强制刷新Layout(布局)组件 - 图2
    这时,刷新不及时带来的问题就出现了
    比如展开时产生UI覆盖
    折叠时产生UI空隙
    都是让人头大的问题

    幸好Unity提供了一个强制刷新UI的方法
    便将此问题完美解决了
    LayoutRebuilder.ForceRebuildLayoutImmediate(recttransform);
    参数为挂有Layout组件的recttransform
    为了确保能够正确的刷新
    建议放在一个协程中,待帧结束后检测一次,若没有刷新再执行一次

    1. IEnumerator UpdateLayout(RectTransform rect)
    2. {
    3. LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
    4. yield return new WaitForEndOfFrame();
    5. Vector3 vecScale = rect.localScale;
    6. float width = rect.rect.width;
    7. float height = rect.rect.height;
    8. while (rect.rect.width == 0)
    9. {
    10. Debug.Log(rect.rect.width);
    11. LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
    12. yield return new WaitForEndOfFrame();
    13. }
    14. }