我有UICollectionView
个自定义UICollectionViewLayout
,可以将项目垂直放置在屏幕上。现在,当我在视图中的某个位置添加新项目时,我想同时滚动到新项目。这是我的代码:
CardsCollection.InsertItems(new NSIndexPath[] { nextIndex });
CardsCollection.ScrollRectToVisible(this.layout.TargetViewFrameForItem(nextIndex), true);
(我正在使用Xamarin,但是OC的人你明白了。)
这在大多数情况下都适用,但不适用于在视图的最末端添加项目。在这种情况下,屏幕只向上滚动一点,而不是显示整个新项目。调用InsertItems
后,视图的内容大小似乎没有立即展开,尽管UICollectionViewLayout.CollectionViewContentSize
实际上已被调用并返回了正确的大小参数。
我尝试了以下在功能上有效的方法:
CardsCollection.PerformBatchUpdates(
() => CardsCollection.InsertItems(new NSIndexPath[] { nextIndex }),
(finished) => CardsCollection.ScrollRectToVisible(this.layout.TargetViewFrameForItem(nextIndex), true));
但是,滚动仅在添加新项目的动画完成后才开始。我对这种美学不太满意,并且仍然希望同时进行这两项行动。有没有简单的方法呢?
答案 0 :(得分:0)
与此答案相关 - Animated scroll-to-item in UICollectionView doesn't always work - 如果项目数量发生变化,首先需要重新加载collectin视图,然后才使用ScrollRectToVisible