草莓♭布丁

导航

Unity的LayoutGroup和ContentSizeFitter同时使用时,动态改变唯一子节点不会刷新大小的问题

问题:Layout Group的大小由子节点决定。

子节点是文本,也挂载了Content Size Fitter,大小可以动态变化。

触发条件:有且只有一个子节点 ,并且在未激活的情况下改变子节点大小(本例中改变文本高度)

子节点虽然会改变大小,但是LayoutGroup不会跟着改变大小。(在Awake,Start中改变子节点高度,就算初始状态是激活的,同样有这个问题)

 

解决方案:给Layout Group再挂载一个脚本,激活后用协程控制。需要等到那一帧结束,关闭LayoutGroup再重新打开,大小即可恢复正常。

注:如果只在Awake或Start中改变一次子节点,可以加一个bool变量hasRefreshed,一共只开关一次即可。

public class LayoutRefreshAutoSize : MonoBehaviour
    {
        private LayoutGroup layoutGroup;
        private bool hasRefreshed = false;

        private void OnEnable()
        {
            //print("enable");
            if (!hasRefreshed)
            {
                StartCoroutine(DelayRefresh());
            }
        }

        /// <summary>
        /// 激活后,要等到当前帧结束自适应才会生效
        /// </summary>
        IEnumerator DelayRefresh()
        {
            yield return 0;
            if (gameObject.activeInHierarchy || !hasRefreshed)
            {
                layoutGroup = GetComponent<LayoutGroup>();
                layoutGroup.enabled = false;
                layoutGroup.enabled = true;
            }
        }
    }

 

posted on 2021-11-23 16:34  草莓♭布丁  阅读(780)  评论(0编辑  收藏  举报

Live2D