LoopScrollRect icon indicating copy to clipboard operation
LoopScrollRect copied to clipboard

srolltoCell() 这个方法没有办法直接到达最底部,总是差一点点,可不可以加紧修复一下,大佬

Open AnyueKami opened this issue 3 years ago • 1 comments

AnyueKami avatar Feb 11 '22 07:02 AnyueKami

您好,能不能给个具体的截图or视频?如果把MovementType改成Clamp 还有这个问题么(我怀疑可能是最后一下回弹导致的)

qiankanglai avatar Feb 16 '22 15:02 qiankanglai

你好。将 MovemuntType 更改为 Clamp 仍然会导致问题。我应该如何移动到单元格的末尾?谢谢

Q-Qumber avatar Jun 07 '23 05:06 Q-Qumber

我在项目demo中复现不出来...能不能给具体的sample? 如果滑动不到底,一般是padding之类的地方导致计算不准带来的

qiankanglai avatar Jun 07 '23 13:06 qiankanglai

GIF

我检查了填充以外的东西,但它不起作用。下面是演示中发生的事情。 版本为2021.3.2f1。 谢谢

Q-Qumber avatar Jun 08 '23 06:06 Q-Qumber

抱歉最近两周一直处于公司加班状态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)

qiankanglai avatar Jul 02 '23 14:07 qiankanglai

您可以使用 RefillCellsFromEnd 解决此问题。谢谢

Q-Qumber avatar Jul 03 '23 07:07 Q-Qumber