LoopScrollRect
LoopScrollRect copied to clipboard
RefreshCells时UpdateItems算法有BUG
比如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 里面的逻辑。
改了下NewItemAtEnd函数,貌似解决了这个问题。
能提供一个最小例子么?这个听上去感觉是界面的content spacing或者size和代码里的不一致导致的 或者用sample场景里的能复现么?
还是因为totalCount修改之后直接调用RefreshCells刷新的问题,现在明确如果totalCount被修改则改为调用Refill刷新否则用RefreshCells刷新。
如果是totalCount有变化,那么应该用Refill相关接口;Refresh是原地刷新数据用的