From e91aa14e9e03f3dc183ab321d1c9494f2e542f1a Mon Sep 17 00:00:00 2001 From: LiRuoChen <571244399@qq.com> Date: Wed, 22 Apr 2026 11:43:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=B8=83=E5=B1=80=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/OverrideLayout/XericScrollRect.cs | 57 +++++++++++++++++------ 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/Runtime/OverrideLayout/XericScrollRect.cs b/Runtime/OverrideLayout/XericScrollRect.cs index 74545d0..a75c819 100644 --- a/Runtime/OverrideLayout/XericScrollRect.cs +++ b/Runtime/OverrideLayout/XericScrollRect.cs @@ -84,6 +84,7 @@ namespace XericUI.OverrideLayout private Queue _activeQueue = new Queue(); private bool layoutDirty; + private bool indexMapDirty; #endregion @@ -91,7 +92,7 @@ namespace XericUI.OverrideLayout public class ScrollItemData : IUIVesselVisibalControl { public GridLayoutCalculator.LayoutItem layout; - + public int index { get; internal set; } protected internal XericScrollRect parentScrollRect; private bool _uiVisibal; @@ -218,11 +219,19 @@ namespace XericUI.OverrideLayout protected override void LateUpdate() { base.LateUpdate(); + // 布局刷新 if (layoutDirty) { layoutDirty = false; RefreshLayout(); } + // 全部索引刷新 + if (indexMapDirty) + { + indexMapDirty = false; + for (int i = 0; i < _childrenDatas.Count; i++) + _childrenDatas[i].index = i; + } } private Vector3[] viewportVertex = new Vector3[4]; @@ -302,21 +311,41 @@ namespace XericUI.OverrideLayout public void AddChildData(ScrollItemData Data) { layoutDirty = true; + Data.index = _childrenDatas.Count; _childrenDatas.Add(Data); } public void RemoveChildData(int index) { layoutDirty = true; + indexMapDirty = true; + // 如果可见,先移除可见性 + if (_childrenDatas[index].GetUIVisibal) + _childrenDatas[index].OutOfVisibal(); _childrenDatas.RemoveAt(index); } public void RemoveChildData(ScrollItemData index) { layoutDirty = true; + indexMapDirty = true; + // 如果可见,先移除可见性 + if (index.GetUIVisibal) + index.OutOfVisibal(); _childrenDatas.Remove(index); } + public void ClearChildData() + { + layoutDirty = true; + indexMapDirty = true; + // 如果可见,先移除可见性 + foreach (var data in _childrenDatas) + if (data.GetUIVisibal) + data.OutOfVisibal(); + _childrenDatas.Clear(); + } + public ScrollItemData GetChildData(int index) { return _childrenDatas[index]; @@ -383,19 +412,19 @@ namespace XericUI.OverrideLayout GridLayoutGroup.Corner.LowerRight => new Vector2(1, 0), _ => throw new ArgumentOutOfRangeException() }; - // rectTransform.pivot = m_childAlignment switch - // { - // TextAnchor.UpperLeft => new Vector2(0, 1), - // TextAnchor.UpperCenter => new Vector2(.5f, 1), - // TextAnchor.UpperRight => new Vector2(1, 1), - // TextAnchor.MiddleLeft => new Vector2(0, .5f), - // TextAnchor.MiddleCenter => new Vector2(.5f, .5f), - // TextAnchor.MiddleRight => new Vector2(1, .5f), - // TextAnchor.LowerLeft => new Vector2(0, 0), - // TextAnchor.LowerCenter => new Vector2(.5f, 0), - // TextAnchor.LowerRight => new Vector2(1, 0), - // _ => throw new ArgumentOutOfRangeException() - // }; + rectTransform.pivot = m_childAlignment switch + { + TextAnchor.UpperLeft => new Vector2(0, 1), + TextAnchor.UpperCenter => new Vector2(.5f, 1), + TextAnchor.UpperRight => new Vector2(1, 1), + TextAnchor.MiddleLeft => new Vector2(0, .5f), + TextAnchor.MiddleCenter => new Vector2(.5f, .5f), + TextAnchor.MiddleRight => new Vector2(1, .5f), + TextAnchor.LowerLeft => new Vector2(0, 0), + TextAnchor.LowerCenter => new Vector2(.5f, 0), + TextAnchor.LowerRight => new Vector2(1, 0), + _ => throw new ArgumentOutOfRangeException() + }; } private void GetOffset(List layoutItems)