切換介面時NGUI中ScrollView沒有初始化問題
阿新 • • 發佈:2019-01-27
在開發過程中,有時遇到這種問題,切換介面是寫的快取並沒有顯示第一個,這種情況,是寫了快取,但沒有些初始化
正常情況下應該正常顯示,
當下拉到下面,切換介面,在切換回來時,就會出現這種情況。
這問題所在就是沒有初始化位置。
上程式碼:
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句,初始化位置後就解決了這個問題。