第一次显示视图之前的 scrollToItemAtIndexPath

scrollToItemAtIndexPath before the view is shown the first time

我有一个 UIView,我在其中添加了一个 UICollectionView。现在此视图显示在应用程序启动时。同时,我滚动到 collection 视图中的某个位置。因此我使用 scrollToItemAtIndexPath。现在的问题是它滚动到错误的位置,因为 collection 视图在开始时有错误的大小: 如果你在 iOS 上以横向启动 iPad 7 collection 视图始终采用 768 作为宽度,尽管它是横向的。

如何在用户不注意的情况下滚动到某个位置?我可以在视图层次结构中的哪个位置调用它?

viewWillAppear: 帧未设置
viewDidAppear:不可能没有用户注意到它
layoutSubviews:这被调用了多次,我只在启动时和用户按下按钮时才需要它

我也尝试使用 layoutIfNeeded,但这对我的边缘情况没有帮助(iOS 7,iPad,启动时横向)。

约束在 viewDidAppearlayoutSubviews 最后一次调用时开始。到时候就晚了。

您可以尝试从 UICollectionView 继承您自己的 class 并查看其 layoutSubviews 是否具有正确的约束并从那里调用 scrollToIndex

如果失败,您可以通过在 viewDidLoad 中设置帧大小并调用 scroll to index 来作弊。 (这个有点复杂)–