【发布时间】:2014-03-17 04:53:06
【问题描述】:
我有一个 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));
但是,滚动只在添加新项目的动画完成后才开始。从美学上讲,我对此不太满意,并且仍然希望同时进行这两种操作。有什么简单的方法吗?
【问题讨论】:
标签: ios xamarin uicollectionview