草莓♭布丁

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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   草莓♭布丁  阅读(905)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
Live2D
欢迎阅读『Unity的LayoutGroup和ContentSizeFitter同时使用时,动态改变唯一子节点不会刷新大小的问题』
点击右上角即可分享
微信分享提示