swift - UICollectionView - 在设备旋转时调整单元格大小 - Swift

标签 swift rotation resize uicollectionview

我已经创建了一个 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/

相关文章:

swift - 有人会如何观察 AVPlayerLayer 的 videoRect 变化?

ios - ViewController 之间的 segue 出现问题

CSS3 : rotate a image in different axis

java - 如何制作检测碰撞的旋转碰撞盒?

c# - 在 C# 中以编程方式调整 wpf 窗口的大小

javascript - 按比例缩放图像以适合当前文档尺寸

IOS - 当应用程序在后台从 UNNotificationAction 触发后发送 http 请求

Swift 应用程序占用更多磁盘空间

python - 如何在 numpy 中旋转索引数组?

linux - XResizeWindow后,绘制的新窗口内容不显示