private void updateContentSize() { if (!AutoContentSize) { return; } if (_listItems.Count == 0) { return; } var content = GetComponent <ScrollRect>().content; var allItemSize = getAllSizeItem(); float widthNew = content.rect.width; float heightNew = content.rect.height; Vector3 pivotNew = Vector3.zero; switch (ScrollDirection) { case Direction.left_to_right: { widthNew = allItemSize.x + FirstItemOffset.x; heightNew = getMaxHeightItem(); pivotNew = Pivot.LeftBottom; break; } case Direction.right_to_left: { widthNew = allItemSize.x + FirstItemOffset.x; heightNew = getMaxHeightItem(); pivotNew = Pivot.RightBottom; break; } case Direction.down_to_top: { widthNew = getMaxWidthItem(); heightNew = allItemSize.y + FirstItemOffset.y; pivotNew = Pivot.LeftBottom; break; } case Direction.top_to_down: { widthNew = getMaxWidthItem(); heightNew = allItemSize.y + FirstItemOffset.y; pivotNew = Pivot.LeftTop; break; } default: Debug.LogError("updateContentSize error: unsupport direction !"); break; } content.sizeDelta = new Vector3(widthNew, heightNew); var pos1 = UnityHepler.getWorldPositioByPivot(this.gameObject, pivotNew); UnityHepler.setWorldPositionByPivot(content.gameObject, pos1, pivotNew); checkCompoment(); }
private void updateItem(int index) { if (index < 0 || index > _listItems.Count - 1) { Debug.LogError("ListView updateItem error: out of range"); return; } var item = _listItems[index]; RectTransform content = GetComponent <ScrollRect>().content; //calculate position Vector3 pivotDecide = Vector3.zero; Vector3 pivotAdd = Vector3.zero; switch (ScrollDirection) { case Direction.left_to_right: pivotDecide = Pivot.LeftBottom; pivotAdd = Pivot.RightBottom; break; case Direction.right_to_left: pivotDecide = Pivot.RightBottom; pivotAdd = Pivot.LeftBottom; break; case Direction.down_to_top: pivotDecide = Pivot.LeftBottom; pivotAdd = Pivot.LeftTop; break; case Direction.top_to_down: pivotDecide = Pivot.LeftTop; pivotAdd = Pivot.LeftBottom; break; default: Debug.LogError("unsupport direction"); break; } if (index == 0) { if (ScrollDirection == Direction.right_to_left) { UnityHepler.setLocalPositionByPivot(item.current, new Vector3(content.rect.width, 0), pivotDecide); } else if (ScrollDirection == Direction.top_to_down) { UnityHepler.setLocalPositionByPivot(item.current, new Vector3(0, content.rect.height), pivotDecide); } else { UnityHepler.setLocalPositionByPivot(item.current, Vector3.zero, pivotDecide); } fixedLocalPositionByContent(item.current); } else { //first item of group if (index % EachOfGroup == 0) { var prevItem = getItem((index / EachOfGroup - 1) * EachOfGroup); Vector3 prevPosition = UnityHepler.getLocalPositioByPivot(prevItem, pivotAdd); UnityHepler.setLocalPositionByPivot(item.current, prevPosition, pivotDecide); fixedItemMargin(item.current, ItemMargin); } else { //next item of group Vector3 prevPosition = UnityHepler.getLocalPositioByPivot(item.prev.current, _currentGroupItemPivotPrev); UnityHepler.setLocalPositionByPivot(item.current, prevPosition, _currentGroupItemPivotNext); fixedItemMargin(item.current, GroupItemMargin); } } }