0

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

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

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

4

1 回答 1

0

当集合视图更改时,您不需要像这样更新布局。

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

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

如果是这样,那么您应该能够delegate使用UICollectionViewFlowLayout.

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

class MyViewController: UICollectionViewDelegateFlowLayout

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

并使用方法...

func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize {
    return CGSize(width: segmentWidth(), height: segmentHeight())
}

应该是这样的。

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

之后只需删除该layoutSubviews方法,它应该按照您的意愿执行。

于 2018-06-13T09:40:45.153 回答