NGUI 动态向grid里添加项没有裁剪问题的解决方案

补充一点这里说的动态生成的控件是指UIlabel,uitexture之类的UI控件,如果往grid里动态添加预设体是没有问题的即使预设体里会有这些UI控件也是没问题的    

出现这个问题的原因很简单,不是没有裁剪而是grid里动态添加的项的panel找错了,所以不受grid的panel的控制,具体代码如下

这是UIWidget里的CreatePanel()方法:

public void CreatePanel (bool addToPanel = true)
{
        ......
        while (trans != null && mPanel == null)
            {
                UIPanel.uipanels.TryGetValue(trans, out mPanel);
                trans = trans.parent;
            }
            if (mPanel == null)
            {
                mPanel = gameObject.AddComponent<UIPanel>();
            }
        ......
}

这是UIWidget的Start()方法:

    void Start ()
	{
		...
		CreatePanel();
	    ...
	}

这是UIPanelOnEnable()方法:

void OnEnable ()
    {
       ......
	    uipanels.Add(cachedTransform, this);
    }

这是UIPanelOnDisable()方法:

void OnDisable ()
{
    ...
    uipanels.Remove(cachedTransform);
    ...
}

uipanels是一个存储着UIPanel的键值对,ui控件就是从这里面查找自己的panel,具体看上面的CreatePanel()方法,如果没有找到自己身上的UIPanel就会找父物体依次往上找知道找到,如果最后还没找到就添加一个UIPanel

言归正传.解决动态向grid里添加项没有裁剪问题的方法很简单,就是先让UIPanelOnEnable()方法执行,再动态向grid里添加控件,因为执行顺序问题,在生成的挂有Widge脚本的物体会在Start()方法中调用CreatePanel()方法,而在此时挂有UIPanel的物体还没调用到Panel的OnEnable方法,也就是说如果你在OnEnable()方法中往grid里添加控件,那么会先执行CreatePanel()方法,再执行UIPanelOnEnable()方法,所以添加的组件就会找到grid父物体的panel而不是grid的panel,而如果grid里的控件不是动态生成的而是才开始搭建的时候就有的,就不会出现这个问题

说了这么多,解决方法有很多只要延迟调用一下动态创建方法就可以,我是用了一个协程延迟了0秒,问题就完美解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值