Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 横向模式下的Swift集合视图_Ios_Swift_Uicollectionview - Fatal编程技术网

Ios 横向模式下的Swift集合视图

Ios 横向模式下的Swift集合视图,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,因此,我正在构建一个应用程序,其中我有一个集合视图,一行有两个单元格。但当我旋转屏幕时,我想将其更改为4。我该怎么做 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let cellWidth = (view.fram

因此,我正在构建一个应用程序,其中我有一个集合视图,一行有两个单元格。但当我旋转屏幕时,我想将其更改为4。我该怎么做

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth =  (view.frame.size.width - 50) / 2
    return CGSize(width: cellWidth, height: cellWidth)
}

override func viewWillTransition(to size: CGSize,
                                 with coordinator: UIViewControllerTransitionCoordinator)
{
    collectionView?.collectionViewLayout.invalidateLayout()
}
在viewWillTransition中添加超级方法

这将允许superview将此方法类传递给其所有子视图

override func viewWillTransition(to size: CGSize,
                             with coordinator: UIViewControllerTransitionCoordinator)
{
      super.viewWillTransition(to: size, with: coordinator)
      collectionView?.collectionViewLayout.invalidateLayout()
}

这个代码帮助我解决了我的问题

func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth =  (view.frame.size.width - 50) / 2
    if UIDevice.current.orientation.isLandscape {
        return CGSize(width: (cellWidth-30)/2, height: (cellWidth-30)/2)
    } else {
        return CGSize(width: cellWidth, height: cellWidth)
    }
}
func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth =  (view.frame.size.width - 50) / 2
    if UIDevice.current.orientation.isLandscape {
        return CGSize(width: (cellWidth-30)/2, height: (cellWidth-30)/2)
    } else {
        return CGSize(width: cellWidth, height: cellWidth)
    }
}