表格设置单元格为预制体的情况下不会刷新这个预制体,因为条件写反了。
This commit is contained in:
@@ -90,22 +90,13 @@ namespace XericUI.XTable.Rendering.Component
|
||||
sc = Mathf.Max(sc, StartCol);
|
||||
er = Mathf.Min(er, EndRow > 0 ? EndRow : rows.Length);
|
||||
ec = Mathf.Min(ec, EndCol > 0 ? EndCol : cols.Length);
|
||||
if (sr >= er || sc >= ec)
|
||||
{
|
||||
if (fullRefresh) ReleaseAll();
|
||||
return;
|
||||
}
|
||||
if (sr >= er || sc >= ec) return;
|
||||
|
||||
var target = new HashSet<(int, int)>();
|
||||
for (int r = sr; r < er; r++)
|
||||
for (int c = sc; c < ec; c++)
|
||||
target.Add((r, c));
|
||||
|
||||
if (fullRefresh)
|
||||
ReleaseAll();
|
||||
else
|
||||
ReleaseExcept(target);
|
||||
|
||||
foreach (var cell in target)
|
||||
if (fullRefresh || !m_Rendered.Contains(cell))
|
||||
RenderCell(cell.Item1, cell.Item2, rows, cols, editorMode);
|
||||
@@ -122,18 +113,6 @@ namespace XericUI.XTable.Rendering.Component
|
||||
m_Rendered.Clear();
|
||||
}
|
||||
|
||||
private void ReleaseExcept(HashSet<(int, int)> target)
|
||||
{
|
||||
var remove = new List<(int, int)>();
|
||||
foreach (var pair in m_Tracked)
|
||||
if (!target.Contains(pair.Key)) remove.Add(pair.Key);
|
||||
foreach (var key in remove)
|
||||
{
|
||||
ReleaseTracked(m_Tracked[key]);
|
||||
m_Tracked.Remove(key);
|
||||
}
|
||||
}
|
||||
|
||||
private void ReleaseTracked(Tracked tracked)
|
||||
{
|
||||
Assembler.ReleaseText(tracked.Text);
|
||||
@@ -191,15 +170,20 @@ namespace XericUI.XTable.Rendering.Component
|
||||
}
|
||||
else if (cell.ContentType == CellContentType.Prefab && cell.Prefab != null && PrefabPool != null)
|
||||
{
|
||||
var prefab = PrefabPool.Acquire(cell.Prefab, cellId, m_Parent);
|
||||
var key = (row, col);
|
||||
GameObject activePrefab = null;
|
||||
bool wasActive = ActivePrefabMap != null
|
||||
&& ActivePrefabMap.TryGetValue(key, out activePrefab);
|
||||
var prefab = wasActive ? activePrefab : PrefabPool.Acquire(cell.Prefab, cellId, m_Parent);
|
||||
if (prefab != null)
|
||||
{
|
||||
var rt = prefab.GetComponent<RectTransform>();
|
||||
rt.anchoredPosition = new Vector2(x, y);
|
||||
rt.sizeDelta = new Vector2(width, height);
|
||||
if (ActivePrefabMap != null)
|
||||
ActivePrefabMap[(row, col)] = prefab;
|
||||
cell.OnPrefabAcquire?.Invoke(prefab);
|
||||
ActivePrefabMap[key] = prefab;
|
||||
if (!wasActive)
|
||||
cell.OnPrefabAcquire?.Invoke(prefab);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user