public void updateNodesPosition() { if (_expandableNodeList.Count == 0) { return; } float allNodesHeight = 0.0f; int nodeLen = _expandableNodeList.Count; for (int i = 0; i < nodeLen; i++) { LExpandNode node = _expandableNodeList[i]; allNodesHeight += node.gameObject.GetComponent <RectTransform>().rect.height; if (node.isExpanded()) { List <GameObject> nodeItems = node.getExpandableNodeItemList(); if (nodeItems.Count > 0) { foreach (GameObject obj in nodeItems) { obj.SetActive(true); allNodesHeight += obj.GetComponent <RectTransform>().rect.height; } } } else { List <GameObject> nodeItems = node.getExpandableNodeItemList(); if (nodeItems.Count > 0) { foreach (GameObject obj in nodeItems) { obj.SetActive(false); } } } } Rect rect = GetComponent <RectTransform>().rect; allNodesHeight = Mathf.Max(allNodesHeight, rect.height); setContainerSize(new Vector2(rect.width, allNodesHeight)); for (int i = 0; i < nodeLen; i++) { LExpandNode node = _expandableNodeList[i]; RectTransform rtran = node.gameObject.GetComponent <RectTransform>(); allNodesHeight = allNodesHeight - rtran.rect.height; rtran.pivot = Vector2.zero; rtran.anchorMax = new Vector2(0, 0); rtran.anchorMin = new Vector2(0, 0); node.transform.SetParent(container.transform); node.transform.localPosition = new Vector2(0, allNodesHeight); node.transform.localScale = new Vector3(1, 1, 1); if (node.isExpanded()) { List <GameObject> itemLists = node.getExpandableNodeItemList(); for (int j = 0; j < itemLists.Count; j++) { RectTransform _rtran = itemLists[j].GetComponent <RectTransform>(); allNodesHeight = allNodesHeight - _rtran.rect.height; _rtran.pivot = Vector2.zero; _rtran.anchorMax = new Vector2(0, 0); _rtran.anchorMin = new Vector2(0, 0); itemLists[j].transform.SetParent(container.transform); itemLists[j].transform.localPosition = new Vector2(0, allNodesHeight); itemLists[j].transform.localScale = new Vector3(1, 1, 1); } } } }