UICollectionView – 调整设备上的单元格旋转 – Swift

我已经创建了一个UICollectionView,这样我就可以将视图排列成整齐的列.我希望设备上有一个专栏> 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)
}

这在第一次加载时按预期工作,但是当我旋转设备时,计算并不总是再次发生,并且视图并不总是按预期重绘.这是旋转设备时的代码

override func willRotatetoInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation,duration: NSTimeInterval) {
    collectionView.collectionViewLayout.invalidateLayout()
    self.view.setNeedsdisplay()
}

我假设我忘了重绘一些东西,但我不确定是什么.任何想法都非常感谢收到!

您可以使用viewWillLayoutSubviews. This question应该是有用的,但只要视图控制器视图要布局其子视图,就会以低音方式调用它.

所以你的代码看起来像这样:

override func viewWillLayoutSubviews() {
  super.viewWillLayoutSubviews()

  guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
    return
  }

  if UIInterfaceOrientationIsLandscape(UIApplication.sharedApplication().statusBarOrientation) {
    //here you can do the logic for the cell size if phone is in landscape
  } else {
    //logic if not landscape 
  }

  flowLayout.invalidateLayout()
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...