NGUI用UIGrid加载Item会有部分空出来的解决办法
NGUI用UIGrid加载Item会有部分空出来的解决办法----------------NGUI 3.8.0
先描述碰到的问题
我的Hierarchy
加载用的方法是如果加载的数据数多于已经存在的Item的数量,就创建;如果少于已经存在的Item的数量就把多余的隐藏起来;
但是在运行的时候会出现下图的情况
有一部分空了出来;
我想应该那部分空出来的是被隐藏的部分,于是在每次赋值的时候都给UIGrid Reposition了一下,但是还是不行
解决办法:
UIGrid下有个选项Hide Inactive ,非活动状态隐藏
勾选后
自动把隐藏部分占用的空间挤了出来
另附加载代码
----->数据多于激活的Item
List<Transform> list = FindAll();//所有现存Item的集合
var listA = list.Where<Transform>(s => s.gameObject.activeSelf == true);//激活的
var listD = list.Where<Transform>(d => d.gameObject.activeSelf == false);//未激活的
if (itemList.Count>=listA.Count())//如果现有的item不足或是正好那么多
{
Transform[] trs = listA.ToArray();
//把现有的激活的item先利用上
for (int i = 0; i < trs.Length; i++)
{
trs[i].GetComponent<BackpackItemController>().rawdata = itemList[i];
}
//不够?把现有的隐藏的item激活了来利用
Transform[] trd = listD.ToArray();
for (int i = 0; i <Mathf.Min( trd.Length,itemList.Count - trs.Length); i++)
{
trd[i].gameObject.SetActive(true);
trd[i].GetComponent<BackpackItemController>().rawdata = itemList[i + trs.Length];
}
//还不够?new出来
for (int i = 0; i < itemList.Count - trd.Length - listA.Count(); i++)
{
GameObject itemPre = Resources.Load("Backpack/Item") as GameObject;
NGUITools.AddChild(grid.gameObject, itemPre).GetComponent<BackpackItemController>().rawdata = itemList[i + trs.Length+trd.Length];
}
}
------->数据少于激活的Item,就把没有用到的Item隐藏
else if (itemList.Count<listA.Count())//现有的item多了,就把没有用到的item给隐藏起来
{
for (int i = 0; i <= listA.Count(); i++)
{
if (i<itemList.Count)
{
listA.ElementAt(i).GetComponent<BackpackItemController>().rawdata = itemList[i];
print(2);
}
else if(i>=itemList.Count)
{
listA.ElementAt(i-1).gameObject.SetActive(false);
print(1);
}
print(3);
}
}
grid.repositionNow = true;