【问题标题】:View layout does not update immediately after insertItemsAtIndexPaths?在 insertItemsAtIndexPaths 之后视图布局不会立即更新?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的链接。我尝试在ScrollRectToVisible 之前调用ReloadData(),但它仍然只滚动了一点。想一下立即展开视图确实很棘手。
    • 所以尝试按索引路径滚动到项目:CardsCollection.ScrollToItem(nextIndex, UICollectionViewScrollPosition.CenteredHorizontally, true)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2018-11-08
    • 2022-09-28
    相关资源
    最近更新 更多