我的应用程序启动时如何显示集合视图的中间单元格

Posted

技术标签:

【中文标题】我的应用程序启动时如何显示集合视图的中间单元格【英文标题】:how to show the middle cell of a collection view when my app starts 【发布时间】:2021-05-13 18:28:50 【问题描述】:

我在 ViewController 的子视图中嵌入了一个 collectionView。 collectionView 有 12 个单元格。每个单元格占据了集合视图的整个宽度和高度,这样我就可以实现分页效果。但是,当应用程序启动时,我想显示中间单元格,例如我的 collectionView 的第 6 个或第 7 个。

附:我在包装视图中有 collectionView,而不是在我的 viewController 中。

在我的 WrapperView 中,我添加了以下方法,但是由于在添加 collectionView 后调用了该方法,因此显示突然跳转。

override func didAddSubview(_ subview: UIView) 
        super.didAddSubview(subview)
        let indexPath = IndexPath(row: 6, section: 0)
        DispatchQueue.main.async 
             self.calendarCollectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: false)
         

如果我可以在集合视图出现在屏幕上之前执行此操作,我或许可以解决这个问题,但我无法在 UIView 生命周期中找到在 didAddSubview(_:) 方法之前调用的方法。

谁能告诉我如何解决这个问题。

【问题讨论】:

【参考方案1】:

在您的数据源加载后使用:

func selectItem(at indexPath: IndexPath?, 
   animated: Bool, 
   scrollPosition: UICollectionView.ScrollPosition)

https://developer.apple.com/documentation/uikit/uicollectionview/1618057-selectitem

最好在视图出现之前使用,所以在viewWillAppearviewDidLoad 中触发

【讨论】:

我的 collectionView 在视图中,而不是在控制器中。那么,我怎样才能确保将显示的单元格是中间单元格。 我编辑了我的问题。我几乎得到了效果,但是在添加了我的 collectionView 的 subView 之后设置了一个跳转。 如果您不希望跳转可见,请保持集合 0 不透明度,直到您设置索引。使用UIViewAnimation.animateWithDuration(0.25) cv.alpha = 1 使淡入不那么突然。

以上是关于我的应用程序启动时如何显示集合视图的中间单元格的主要内容,如果未能解决你的问题,请参考以下文章

自动选择集合视图的中间可见单元格

在集合视图单元格 Swift 中管理多个进度视图

集合视图中单元格的宽度不正确

集合视图单元大小/拟合问题

集合视图单元格未出现

如何通过单击更改集合视图单元格中的标签颜色