描述:在一个滚动列表中,再次插入一个滚动列表。 实现点击上层滚动列表中的按钮,让他的子物体显示出来并使得整个滚动列表的Content放大,再次点击实现收缩,并使得整个滚动列表的Content缩小。
操作内容如上图:
下面是添加在ClubItems上的脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ClubItenZommController : MonoBehaviour
{
public RectTransform ClubItemsTrans;
public RectTransform ContentTrans;
private RectTransform ParentTrans;
private float clubItemHeight; //获得clubItem当前的高度
private float contenHeight; //获得content当前的高度
public GameObject clubItem;
public Button ShowOrCloseBtn;
private bool isShow;
private List<GameObject> ClubItem = new List<GameObject>();
/// <summary>
/// 加减的高度
/// </summary>
private float redusNumber = 71.5f;
private static float tempParentY;
private float tempThisClubItemsY;
private float tempContentTransY;
void Start()
{
isShow = true;
ParentTrans = this.gameObject.transform.parent.GetComponentInParent<RectTransform>();
clubItemHeight = ClubItemsTrans.sizeDelta.y;
contenHeight = ContentTrans.sizeDelta.y;
ShowOrCloseBtn.onClick.AddListener(OnShowOrCloseBtnClick);
for (int i = 0; i < 11; i++)
{
Init(i);
}
TheClubHeightAdd(11, ParentTrans.childCount);
tempThisClubItemsY = ClubItemsTrans.sizeDelta.y;
tempContentTransY = ContentTrans.sizeDelta.y;
tempParentY = ParentTrans.sizeDelta.y;
}
/// <summary>
/// 按钮的点击事件
/// </summary>
public void OnShowOrCloseBtnClick()
{
if (isShow)
{
HideMyClubItem();
}
else
{
ShowMyClubItem();
}
}
/// <summary>
/// 缩小时数据清理
/// </summary>
public void HideMyClubItem()
{
for (int i = 0; i < ClubItem.Count; i++)
{
ClubItem[i].transform.gameObject.SetActive(false);
}
//这个地方值得注意:你这里不给他价格值 ContentSizeFitter 是不会变动
float needY = tempParentY + 0.1f;
ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 80.79f);
ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 61.8f);
ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, needY);
isShow = false;
}
/// <summary>
/// 放开时,看到我自己俱乐部中的球星数据
/// </summary>
public void ShowMyClubItem()
{
for (int i = 0; i < ClubItem.Count; i++)
{
ClubItem[i].transform.gameObject.SetActive(true);
}
ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempThisClubItemsY);
ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempContentTransY);
ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, tempParentY);
isShow = true;
}
/// <summary>
/// 设置加入 index 个单位的 item 后的高度
/// </summary>
/// <param name="index"></param>
public void TheClubHeightAdd(int index, int count)
{
ClubItemsTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, clubItemHeight + index * redusNumber);
ParentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, (clubItemHeight + index * redusNumber) * count + 5);
ContentTrans.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, contenHeight + index * redusNumber);
}
/// <summary>
/// 初始化俱乐部Item下的子物体的个数
/// </summary>
/// <param name="index">个数</param>
private void Init(int index)
{
GameObject go = (GameObject)Instantiate(clubItem, ContentTrans.transform.position, Quaternion.identity);
go.transform.SetParent(ContentTrans);
ClubItem.Add(go);
}
}