下面来说下ngui scrollview 数量不够回滚到顶部的问题,主要先给大家讲一下概念,然后贴出详细的实例教程供大家来学习,具体的内容和步骤如下:

动态添加,基本思想是:
1、先把要添加的元素在编辑器中编辑好,制作成一个prefab。
2、在代码中,动态的生成一个新的对象加入到Grid对象的子对象中。这里利用到了Resources对象,这个对象的用法可以参照官网,就是在Assets目录下有一个Resources目录,位置随便,只要是在Assets目录下就行。
3、加入对象之后,可以从这些对象中获取子对象进行属性的修改,比如添加了十个武器,那么十个武器的Icon,名字和价格都不一样。

下面代码代码中:

代码如下:

  1.                            var GameObject  ngui_grid = GameObject.Find ("UIGrid");
  2.             UIGrid ngui_ui_grid = ngui_grid.GetComponent<UIGrid>();
  3.             GameObject _gridItem = NGUITools.AddChild(ngui_grid, (GameObject)(Resources.Load("GridItemPrefab")));
  4.             // 生成的对象重新命名
  5.             _gridItem.name = "gridItem" + indexSlot;


  6.             var item = itemManage.Items[itemslot.Index];
  7.             
  8.             // 动态改变每一个武器对象的显示属性。
  9.             Transform[] allChildren = _gridItem.GetComponentsInChildren<Transform>();
  10.             foreach (Transform child in allChildren)
  11.             {
  12.                 if(child.gameObject.tag == "GridItemIcon")
  13.                 {
  14.                     UISprite _ItemIcon = child.gameObject.GetComponent<UISprite>();
  15.                     _ItemIcon.spriteName = item.Icon.name;
  16.                 }
  17.                 else if(child.gameObject.tag == "GridItemName")
  18.                 {
  19.                     UILabel _ItemName = child.gameObject.GetComponent<UILabel>();
  20.                     _ItemName.text = item.Name+" "+itemslot.Index;
  21.                 }
  22.                 else if(child.gameObject.tag == "GridItemPrice")
  23.                 {
  24.                     UILabel _ItemPrice = child.gameObject.GetComponent<UILabel>();
  25.                     _ItemPrice.text = item.Price+"$";
  26.                 }
  27.                 else
  28.                 {
  29.                     // do nothing,,,
  30.                 }
  31.             }

  32.             // 加入这个标志,可以让元素添加之后,Grid对元素进行重新排列,
  33.             ngui_ui_grid.repositionNow = true;

  34.             return;


元素删除,代码如下:
  1.             for(int k = 0;k<ngui_grid.transform.childCount;k++)
  2.             {
  3.                 GameObject go = ngui_grid.transform.GetChild(k).gameObject;
  4.                 Destroy(go);
  5.                 
  6.                 // 这个标记会让元素立即重新排列。
  7.                 ngui_ui_grid.Reposition();
  8.             }