当设备旋转而不将设备锁定为纵向模式时,如何将collectionView的所有项目固定在适当的位置?

时间:2018-09-28 19:06:48

标签: ios swift uicollectionview uicollectionviewlayout uiinterfaceorientation

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

1 个答案:

答案 0 :(得分:1)

根据您的评论,您想使所有屏幕保持纵向,但是要知道设备是否处于横向而不需要旋转界面(对于摄像头屏幕),应该...

  • 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
                }
            }
    
        }
    }