insertItemsAtIndexPaths后,视图布局不会立即更新?

时间:2014-03-17 04:53:07

标签: ios xamarin uicollectionview

我有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));

但是,滚动仅在添加新项目的动画完成后才开始。我对这种美学不太满意,并且仍然希望同时进行这两项行动。有没有简单的方法呢?

1 个答案:

答案 0 :(得分:0)

与此答案相关 - Animated scroll-to-item in UICollectionView doesn't always work - 如果项目数量发生变化,首先需要重新加载collectin视图,然后才使用ScrollRectToVisible

相关问题