LoopScrollRect icon indicating copy to clipboard operation
LoopScrollRect copied to clipboard

RefreshCells时UpdateItems算法有BUG

Open SturgeonDu opened this issue 1 year ago • 4 comments

比如LoopVerticalScrollRect共有10个元素且每行显示4个,整个界面能显示2行多一点点。这时候更新totalCount为5完了再重新设置totalCount为10并调用RefreshCells,这时候只能刷新两行元素并不会将剩余的元素创建出来。 LoopVerticalScrollRect UpdateItems里: if (viewBounds.min.y < contentBounds.min.y + m_ContentBottomPadding) { float size = NewItemAtEnd(), totalSize = size; while (size > 0 && viewBounds.min.y < contentBounds.min.y + m_ContentBottomPadding - totalSize) { size = NewItemAtEnd(); totalSize += size; } if (totalSize > 0) changed = true; } 我查了下代码是因为刷新的时候第二排有内容,第一次NewItemAtEnd的时候会把这一行剩余的3个补充完但是totalSize也被计算进下面while的判断了导致不会进入while 里面的逻辑。

SturgeonDu avatar Dec 04 '23 10:12 SturgeonDu

改了下NewItemAtEnd函数,貌似解决了这个问题。

SturgeonDu avatar Dec 04 '23 11:12 SturgeonDu

能提供一个最小例子么?这个听上去感觉是界面的content spacing或者size和代码里的不一致导致的 或者用sample场景里的能复现么?

qiankanglai avatar Dec 11 '23 13:12 qiankanglai

还是因为totalCount修改之后直接调用RefreshCells刷新的问题,现在明确如果totalCount被修改则改为调用Refill刷新否则用RefreshCells刷新。

SturgeonDu avatar Dec 18 '23 06:12 SturgeonDu

如果是totalCount有变化,那么应该用Refill相关接口;Refresh是原地刷新数据用的

qiankanglai avatar Dec 18 '23 07:12 qiankanglai