layoutSubviews在添加到UICollectionView时会冻结应用程序

时间:2018-06-13 09:37:32

标签: ios swift uicollectionview uicollectionviewflowlayout

我想在自定义UICollectionView获取其大小时收到通知。它是从xib创建的。 我添加了以下功能:

override func layoutSubviews() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical
    layout.itemSize = CGSize(width: segmentWidth(), height: segmentHeight())
    self.setCollectionViewLayout(layout, animated: false)
}

这个函数被无休止地调用。我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

当集合视图发生变化时,您不需要像这样更新布局。

事实上,因为你正在使用Flow Layout,所以应该有一种更简单的方法来让它做你想做的事。

我认为segmentHeightsegmentWidth是依赖于集合视图大小的函数,这就是你需要重新计算它们的原因吗?

如果是,那么您应该可以使用delegate的{​​{1}}功能。

首先使用新协议更新视图控制器...

UICollectionViewFlowLayout

然后,您的视图控制器将充当流布局的委托。

使用方法......

class MyViewController: UICollectionViewDelegateFlowLayout

应该。

如果我错过了什么,请告诉我,但你应该从中得到你想要的一切。

之后只需删除func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize { return CGSize(width: segmentWidth(), height: segmentHeight()) } 方法,它就应该按照您的意愿执行。