繁体   English   中英

UICollectionView布局故障

[英]UICollectionView layout malfunction

我正在构建字典应用程序,其功能之一是您可以“向下钻取”定义。 您查找一个单词,定义中有一个您不了解的单词,因此您轻按该单词,应用程序会显示该单词的定义(如果有)。 如果有人熟悉,这对于App Store上的iOS词典应用程序来说是非常标准的。

一个功能是,我将拥有一个在向下钻取时显示每个单词的条,这样您就可以在此水平条上获得一系列“单词”。 这个想法是,您可以点击链中的单词来在单词链中前后导航。

为了表示这条链,我使用一个UICollectionView和一个子类UICollectionViewController。 因为它本质上是一个带有一行的“网格”,所以这对我来说很有意义。 我正在使用情节提要,因此我只是将自定义控制器嵌入到主视图中,在主控制器和此自定义集合控制器之间来回传递事件。 很简单

现在,假设用户轻敲了许多不同的单词,那么您将获得UICollectionViewCells的“链”,该链从左到右在整个条形上逐渐增长,直到达到边缘为止。 由于UICollectionView基于/具有UIScrollView,所以这应该不是问题。 我的想法是,如果要显示的项目数超过视图的宽度,则CollectionView将展开contentView并将项目放置在视图端口的右边缘之外,然后我可以以编程方式滚动视图以显示新的添加的项目。

这是我用来执行此操作的代码(已编辑)。 我在子类UICollectionViewController中调用了此方法:

- (void)reloadDataWithAnimation
{
    [self.collectionView performBatchUpdates:^{
        [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
    } completion:^(BOOL finished) {
            [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:model.data.count - 1 inSection:0]
                                        atScrollPosition:UICollectionViewScrollPositionNone animated:YES];
        }

    }];
}

这或多或少是我通常使用UITableView所做的事情:告诉我在更改模型后重新加载其数据。 直到开始我在SO上发现一个问题,涉及到performBatchUpdates的使用,然后才开始工作,直到我意识到需要进入完成块为止,我在做scrollToItemAtIndexPath遇到了麻烦。

现在,这是一个时髦的部分:在项目填满整个视图之前,一切工作正常。 项第一次超出边界时,CollectionView将该项置于行中最后一项的下方 这看起来真的很奇怪,因为视图只有一排高,所以您可以半看停在该行中最后一个下方的物品,大部分被遮盖了。 没有滚动发生。

此时,如果来回滚动CollectionView,则该项将重新配置并移动到正确的位置。 或者,如果您添加另一个项目,它们将正确对齐,并且视图将按预期滚动。 连续添加就可以了。 但是,如果向后滚动到左侧然后添加另一个项目,则该项目会短暂出现在视口中当前当前可见的项目下方,然后视图滚动到最右侧,并且在滚动时,放错位置的项目会跳至正确位置。

尽管我开始发布此问题是因为我在Stack Overflow上找不到任何内容,但是在编写问题的过程中,“相似问题”侧边栏已更新,并且我发现了相似的问题,最终得到了答案。

类似的问题: UICollectionView单元格布局超出了集合视图的范围

显然,此问题为Apple所知。

这是上述问题中链接的解决方案: https : //stackoverflow.com/a/13389461/700471

Nick Snyder发布的代码完全为我解决了这个问题。

编辑:此外,最后,我绕过FlowLayout继承了UICollectionViewLayout的子类,并通过本教程制作了自己的布局。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM