Ios layoutSubviews在添加到UICollectionView时冻结应用程序
我希望在自定义UICollectionView获得其大小时收到通知。它是从xib创建的。 我添加了以下功能:Ios layoutSubviews在添加到UICollectionView时冻结应用程序,ios,swift,uicollectionview,uicollectionviewflowlayout,Ios,Swift,Uicollectionview,Uicollectionviewflowlayout,我希望在自定义UICollectionView获得其大小时收到通知。它是从xib创建的。 我添加了以下功能: override func layoutSubviews() { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .vertical layout.itemSize = CGSize(width: segmentWidth(), height: segmentHeight())
override func layoutSubviews() {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.itemSize = CGSize(width: segmentWidth(), height: segmentHeight())
self.setCollectionViewLayout(layout, animated: false)
}
这个函数被无休止地调用。我做错了什么 当集合视图更改时,不需要像这样更新布局 事实上,因为您使用的是流布局,所以应该有一种更简单的方法让它做您想要的事情 我假设
segmentHeight
和segmentWidth
是依赖于集合视图大小的函数,这就是您需要重新计算它们的原因
如果是这样,您应该能够使用UICollectionViewFlowLayout
的委派功能
首先用新协议更新视图控制器
class MyViewController: UICollectionViewDelegateFlowLayout
这样,视图控制器就可以充当流布局的代理
并使用该方法
func collectionView(UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize {
return CGSize(width: segmentWidth(), height: segmentHeight())
}
应该是这样
如果我错过了什么,请告诉我,但你应该从中得到你想要的一切
之后,只需删除layoutSubviews
方法,它就可以按照您的要求执行。请更正您的代码,您有两个函数声明,可能是一个typo@CZ54谢谢Done@Luda将编辑问题。对不起,刚才我的电话里有一个简短的回答:D