我已经创建了一个 UICollectionView,这样我就可以将 View 排列成整齐的列。我希望设备上有一个单列 > 500 像素宽。
为了实现这一点,我创建了这个函数:
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let size = collectionView.frame.width
if (size > 500) {
return CGSize(width: (size/2) - 8, height: (size/2) - 8)
}
return CGSize(width: size, height: size)
}
这在第一次加载时按预期工作,但是当我旋转设备时,计算并不总是再次发生,并且 View 并不总是按预期重绘。这是我在旋转设备时的代码:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
collectionView.collectionViewLayout.invalidateLayout()
self.view.setNeedsDisplay()
}
我假设我忘记重画一些东西,但我不确定是什么。非常感谢收到任何想法!
最佳答案
也许最直接的方法是在 viewWillTransitionToSize 期间使用 invalidateLayout:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
return
}
flowLayout.invalidateLayout()
}
关于swift - UICollectionView - 在设备旋转时调整单元格大小 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132766/