LoopScrollRect
LoopScrollRect copied to clipboard
srolltoCell() 这个方法没有办法直接到达最底部,总是差一点点,可不可以加紧修复一下,大佬
您好,能不能给个具体的截图or视频?如果把MovementType改成Clamp 还有这个问题么(我怀疑可能是最后一下回弹导致的)
你好。将 MovemuntType 更改为 Clamp 仍然会导致问题。我应该如何移动到单元格的末尾?谢谢
我在项目demo中复现不出来...能不能给具体的sample? 如果滑动不到底,一般是padding之类的地方导致计算不准带来的
我检查了填充以外的东西,但它不起作用。下面是演示中发生的事情。 版本为2021.3.2f1。 谢谢
抱歉最近两周一直处于公司加班状态orz... 视频我看了下,其实这里不是滑不到尾部,而是滑到了一个保护状态...
ScrollToCells(xxx, -1)
这种立刻完成的刷新其实底层是靠RefillCells
实现的;然后这里就触发了一个极端情况: 最后一个cell的东西其实不够填充,所以会自动往回补齐一些元素。所以最后视频中的效果是补齐到cell16和顶部对齐。
这时候有三个办法来解决:
- 如果你需要的是滑动效果的,那么在
ScrollToCell
的第二个参数speed给一个正数,就能保证带动画效果滑动到尾部 - 如果确实是不需要滑动效果(speed=-1),那么这时候建议直接使用RefillCellsFromEnd来解决问题,直接原地刷新到尾部
- 如果你确实非常希望以
ScrollToCell(19, -1)
这种形式来实现,那么可以这么修改下(虽然我个人不推荐,这样会导致这个函数的语义有点混乱...)
Runtime/LoopScrollRectBase.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Runtime/LoopScrollRectBase.cs b/Runtime/LoopScrollRectBase.cs
index 84916bd..54b0aa3 100644
--- a/Runtime/LoopScrollRectBase.cs
+++ b/Runtime/LoopScrollRectBase.cs
@@ -1011,6 +1011,8 @@ namespace UnityEngine.UI
break;
first = false;
sizeFilled += size;
+ if (sizeFilled > sizeToFill)
+ contentOffset -= sizeFilled - sizeToFill;
}
if (fillViewRect && itemSize > 0 && sizeFilled < sizeToFill)
您可以使用 RefillCellsFromEnd 解决此问题。谢谢