在开发过程中,有时遇到这种问题,切换界面是写的缓存并没有显示第一个,这种情况,是写了缓存,但没有些初始化
正常情况下应该正常显示,
当下拉到下面,切换界面,在切换回来时,就会出现这种情况。
这问题所在就是没有初始化位置。
上代码:
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句,初始化位置后就解决了这个问题。