hch
2025-12-29 498c0aa885138063c8537bc6ad4e078857f6f0ee
0312 基础界面增加 嵌套ContentSizeFitter需要强制刷新排版
2个文件已修改
29 ■■■■■ 已修改文件
Main/System/UIBase/UIBase.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/UIUtility.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/UIBase/UIBase.cs
@@ -79,6 +79,8 @@
    [Header("点击空白关闭")]
    [SerializeField] public bool clickEmptySpaceClose = false;
    [Header("嵌套ContentSizeFitter需要强制刷新排版")]
    public Transform layout;
    public GameObject screenMask = null;
    private Button btnClickEmptyClose;
@@ -301,6 +303,10 @@
        try
        {
            OnPreOpen();
            if (layout != null)
            {
                UIUtility.ForceRefreshLayout(layout).Forget();
            }
        }
        catch (Exception e)
        {
Main/Utility/UIUtility.cs
@@ -3,6 +3,7 @@
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using Cysharp.Threading.Tasks;
@@ -344,4 +345,26 @@
        return string.Join("/", names);
    }
        /// <summary>
    /// 强制刷新Layout,解决嵌套Layout和ContentSizeFitter的重叠问题
    /// </summary>
    public static async UniTask ForceRefreshLayout(Transform _layout)
    {
        await UniTask.DelayFrame(2);
        // 刷新所有Layout组件
        var layouts = _layout.GetComponentsInChildren<LayoutGroup>(true);
        foreach (var layout in layouts)
        {
            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
        }
        await UniTask.DelayFrame(2);
        // 刷新所有Layout组件
        foreach (var layout in layouts)
        {
            LayoutRebuilder.ForceRebuildLayoutImmediate(layout.GetComponent<RectTransform>());
        }
    }
}