NGUI用UIGrid加载Item会有部分空出来的解决办法

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隐藏

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;

时间: 2024-10-26 06:43:05

NGUI用UIGrid加载Item会有部分空出来的解决办法的相关文章

vs2012 提示 未能正确加载 &quot;Visual C++ Language Manager Package&quot; 包 的解决办法

vs2012 提示 未能正确加载 "Visual C++ Language Manager Package" 包 的解决办法 来源 https://www.cnblogs.com/zhangdongsheng/p/5846790.html 1.  点击 vs2012菜单栏 工具-> Visual Studio 命令提示 打开命令窗口 2. 输入命令  "devenv /Setup" 3. 重新打开 vs2012 Windows PowerShell 版权所有

IDEA错误: 找不到或无法加载主类 com.xxx.freight.dofreight.doFreight解决办法

1.右键点击工程,选择open Module Settings或点击File选择Project Structure,进入页面 2.选择Artifacts->JAR->From modules with dependencies 3.弹出对话框 为避免出现“错误: 找不到或无法加载主类 com.jd.freight.dofreight.doFreight” 请按下图步骤打包: 即: ,点击OK,页面显示jar包的输出路径.点击OK,配置完成 4.在idea菜单栏,点击Build->Buil

jQuery之JSP加载JS文件不起作用的有效解决方法

JSP加载JS文件不起作用的有效解决方法 作者: 字体:[增加 减小] 类型:转载 时间:2014-04-08 jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文件,下面有个不错的解决方法,大家可以参考下 目录结构:jsp导入jquery文件,老是不起作用,原因在于: 复制代码 代码如下: <script type="text/javascript" src="js/jquery-1.4.2.min.js"><

Win7 64bit系统WinFrom下未能加载文件或程序集“System.Data.SQLite”的解决办法

在Win7 64bit系统下调试程序时出现如下错误: 未能加载文件或程序集”System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序. 事实上System.Data.SQLite.dll控件在默认情况下是32bit的,在64bit系统下得使用另一个控件. 可以到这里http://sourceforge.net/projects/sqlite-dotnet2/files/下载一个安装程序包,安装完后在D:\Program Files (x86)\SQLite.NET\bi

关于unity 中使用AssetBundle加载资源,shader偶尔会丢失的问题解决办法

问题描述: 因为项目中要进行热更新设计,所以用unity官方推荐的打包方式assetbundle进行打包,打包好了以后再电脑上运行正常,但是当发布到android上后发现偶尔场景背景会出现空白,多方查找,发现unity存在使用assetbundle加载资源会丢失shader的问题.网上找了一些解决方式,测试可用,分享出来. 方案一:(亲测可用) 第一步,在将用到的Shader加到Editor->Graphics Settings的Shader列表里再进行打包(依赖打包) 第二步,在代码中给sha

关于怎样用PHP及JS来动态加载html元素及加载的html代码绑定事件失效的解决方法!

首先编写好的html代码放入php文件里面设置请求头格式为text/html 然后呢我将用jquery来操作 先定义一个用了盛放代码的容器 $(function(){}) => window.onload .sn-header-bg 是我用来盛放代码的容器 我的php文件名是header.php放在data目录下! 执行以上代码完成后一个页头就出来了! 加载完成后我在header里面绑定了两个函数,但是全部失效了,原因是没找到对应的dom元素, 根本原因是我没加载完成之前这两个函数就已经执行去寻

jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

转自:http://www.cnblogs.com/sunjie9606/archive/2012/09/13/2683636.html 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout" 等 处理方法: 在html片段加载完毕后使用 Js代码 $.parser.parse(context) 即可重新渲染. 实现原理: 首先附上jquery.parser.js的源码 Js代码 (function($){ $.parser

asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。

最近开发一个项目,里面用到了非.net开发的一个dll文件接口,发现发布到window2003服务器上后,运行网站总是提示 "无法加载 DLL"D:\11\1.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). "这个错误.但是我在本地xp系统上调试是可以的. dll使用com调用如下 [DllImport(@"D:\11\1.dll", EntryPoint = "aaa", CharSet

加载网络映射盘中的assembly失败的处理办法

错误症状: 1.{"未能加载文件或程序集“file://*****”或它的某一个依赖项.不支持操作. (异常来自 HRESULT:0x80131515)":"file://****"}; 2.{"尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下不启用 CAS 策略,因此,此加载可能会很危险.如果此加载不是要对程序集进行沙盒处理,请启用 load