NGUI用UIGrid加载Item会有部分空出来的解决办法----------------NGUI 3.8.0
先描述碰到的问题
我的Hierarchy
加载用的方法是如果加载的数据数多于已经存在的Item的数量,就创建;如果少于已经存在的Item的数量就把多余的隐藏起来;
但是在运行的时候会出现下图的情况
有一部分空了出来;
我想应该那部分空出来的是被隐藏的部分,于是在每次赋值的时候都给UIGrid Reposition了一下,但是还是不行
解决办法:
UIGrid下有个选项Hide Inactive ,非活动状态隐藏
勾选后
自动把隐藏部分占用的空间挤了出来
另附加载代码
----->数据多于激活的Item
1 List<Transform> list = FindAll();//所有现存Item的集合 2 var listA = list.Where<Transform>(s => s.gameObject.activeSelf == true);//激活的 3 var listD = list.Where<Transform>(d => d.gameObject.activeSelf == false);//未激活的 4 5 if (itemList.Count>=listA.Count())//如果现有的item不足或是正好那么多 6 { 7 Transform[] trs = listA.ToArray(); 8 //把现有的激活的item先利用上 9 for (int i = 0; i < trs.Length; i++) 10 { 11 trs[i].GetComponent<BackpackItemController>().rawdata = itemList[i]; 12 } 13 14 15 //不够?把现有的隐藏的item激活了来利用 16 Transform[] trd = listD.ToArray(); 17 for (int i = 0; i <Mathf.Min( trd.Length,itemList.Count - trs.Length); i++) 18 { 19 trd[i].gameObject.SetActive(true); 20 trd[i].GetComponent<BackpackItemController>().rawdata = itemList[i + trs.Length]; 21 } 22 23 24 //还不够?new出来 25 for (int i = 0; i < itemList.Count - trd.Length - listA.Count(); i++) 26 { 27 GameObject itemPre = Resources.Load("Backpack/Item") as GameObject; 28 NGUITools.AddChild(grid.gameObject, itemPre).GetComponent<BackpackItemController>().rawdata = itemList[i + trs.Length+trd.Length]; 29 } 30 }
------->数据少于激活的Item,就把没有用到的Item隐藏
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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;