嵌套的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;
}
}