嵌套的ContentSizeFitter刷新


嵌套的ContentSizeFitter刷新

在做編輯器的時候,有些配置選項需要有可以折疊展開這個功能,如圖所示:

我這邊內容布局用了ContentSizeFitter這個組件,這個東西刷新需要隔一幀,我每個一幀給ContentSizeFitter刷新一次,發現這個雖然可以實現正確刷新顯示,但是會閃一下。之后看了宣雨松大神的這篇文章 Unity3D研究院之ContentSizeFitter同步立即響應回調,改成了同步刷新就不閃了!

IEnumerator Refresh(Transform trans = null)
{
    if (trans != null)
    {
        //yield return null;
        while (trans != null)
        {
            ContentSizeFitter csf = trans.GetComponent<ContentSizeFitter>();
            if (csf)
            {
                // 加上這一句Rebuild
                 LayoutRebuilder.ForceRebuildLayoutImmediate(trans.GetComponent<RectTransform>());
                // 之前的做法
                //csf.enabled = false;
                //csf.enabled = true;
                //yield return null;
            }
            trans = trans.parent;
        }
        yield break;
    }

    GameObject go = GameObject.Find("UICanvas");
    Transform t = go.transform.Find("ScrollView/Viewport/Content");
    ContentSizeFitter[] coms = t.GetComponentsInChildren<ContentSizeFitter>();
    foreach (var item in coms)
    {
        LayoutRebuilder.ForceRebuildLayoutImmediate(trans.GetComponent<RectTransform>());
        //item.enabled = false;
        //item.enabled = true;
        //yield return null;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM