当设备旋转时如何在不将设备锁定为纵向模式的情况下将 collectionView 的所有项目固定到位?

How do you hold all the items of a collectionView in place when the device rotates without locking the device in portrait mode?

我想构建一个 collectionView,当用户旋转设备而不将设备的方向锁定为纵向模式时,它会将所有单元格固定在适当的位置。我试过使布局无效但无济于事。谢谢您的帮助。

根据您的评论,您希望将所有屏幕保持纵向,但要知道设备是否处于横向而不旋转界面(对于相机屏幕),您应该...

  • your info.plist
  • 中将支持的界面方向设置为纵向
  • 使用CMMotionManager

    检测设备方向
    let motionManager = CMMotionManager()
    var currentOrientation = UIDeviceOrientation.portrait
    
    func montiorOrientation() {
        motionManager.startAccelerometerUpdates(to: OperationQueue()) { data, error in
            if let error = error {
                print("CM orientation error - \(error)")
                return
            }
            let acceleration = data!.acceleration
    
            let orientation: UIDeviceOrientation = fabs(acceleration.y) < fabs(acceleration.x) ?
                (acceleration.x > 0 ? .landscapeRight : .landscapeLeft) :
                (acceleration.y > 0 ? self.currentOrientation : .portrait) // Ignore portraitUpsideDown
    
            if orientation != self.currentOrientation {
                DispatchQueue.main.async {
                    self.currentOrientation = orientation
                }
            }
    
        }
    }