【发布时间】:2017-10-31 22:18:39
【问题描述】:
我有一个 UICollectionViewController 有一堆单元格,每个单元格都有屏幕大小。
如果我以纵向或横向启动应用程序,一切都会按预期工作。
问题是当我更改屏幕方向并调用collectionViewLayout.invalidateLayout() 时,单元格大小保持不变,而没有调整它们的大小。
我不知道为什么会这样。
这里有一些代码:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
print("size for item")
return CGSize(width: view.frame.width, height: view.frame.height)
}
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (_) in
self.collectionViewLayout.invalidateLayout() // layout update
}, completion: nil)
}
在第一次加载时,我从设置的尺寸中获取打印件,但在更改方向后,它不会调用它,所以当我更改方向时,单元格大小不适合屏幕,因为它适合启动。
任何想法可能是什么原因造成的,或者我在这里做错了什么?
谢谢
编辑
不知何故,我试图在willTransition 函数中插入一个打印语句,但我注意到它不会在屏幕旋转时触发。我认为问题出在invaldateLayout() 之外,因为它从不触发。
这个覆盖函数怎么不自动调用呢?
【问题讨论】:
标签: ios swift uicollectionview