1. 程式人生 > >切換介面時NGUI中ScrollView沒有初始化問題

切換介面時NGUI中ScrollView沒有初始化問題

在開發過程中,有時遇到這種問題,切換介面是寫的快取並沒有顯示第一個,這種情況,是寫了快取,但沒有些初始化

正常情況下應該正常顯示,

當下拉到下面,切換介面,在切換回來時,就會出現這種情況。

這問題所在就是沒有初始化位置。

上程式碼:

 

 void Init()
    {
                 //繫結控制元件
        PanelList = transform.FindChild("Panel_HS").GetComponent<UIPanel>();
        SpringP = transform.FindChild("Panel_HS").GetComponent<SpringPanel>();
        panelView = transform.FindChild("Panel_HS").GetComponent<UIScrollView>();
        myWrap = transform.FindChild("Panel_HS").GetComponent<UIMyWrapContent>();
        myWrap.InitThis();
        myWrap.onInitializeItem = OnInitializeItem;
}

  //滑動執行方法
void OnInitializeItem(GameObject go, int wrapIndex, int realIndex)
    {
        if (equipList.Count < MaxItemNum + 1 || !bInit)
            return;
        if (go.name.StartsWith("Item_ZB_"))
        {
            //itemP是1~6表示哪一個預製
            int itemP = 0;
            int.TryParse(go.name.Replace("Item_ZB_", string.Empty), out itemP);
            if (realIndex > 0)
            {
                items[itemP - 1].gameObject.SetActive(false);
                return;
            }
            ///reI 是表示當前快取的東西,是第幾個
            int reI = Mathf.Abs(realIndex);
            if (equipList.Count > reI)
                items[itemP - 1].SetData(equipList[reI]);
        }
    }
 void SetListData()
    { 
              myWrap.maxIndex = 0;//去設定快取的最大索引
            if (equipList.Count > MaxItemNum)
            {
                myWrap.minIndex = 1 - equipList.Count;
                for (int i = 0; i < MaxItemNum; i++)
                {
                    items[i].gameObject.SetActive(true);
                    items[i].SetData(equipList[i]);
                    items[i].transform.localPosition = new Vector3(0, -   myWrap.itemSize * i, 0);
                }
               
            }
            else
            {
                myWrap.minIndex = 1 - equipList.Count;
                for (int i = 0; i < MaxItemNum; i++)
                {
                    items[i].gameObject.SetActive(true);
                    items[i].transform.localPosition = new Vector3(0, -myWrap.itemSize * i, 0);
                    if (i >= equipList.Count)
                        items[i].Hide();
                    else
                        items[i].SetData(equipList[i]);
                }
            }


              //panel的初始位置
            PanelList.transform.localPosition = new Vector3(490, 187, 0);
            PanelList.clipOffset = Vector2.zero;
            SpringP.enabled = false;
            panelView.ResetPosition();
            //如果沒有上面4句話就會出現上述情況,
}

在填充完資料後,加上這4句,初始化位置後就解決了這個問題。