How to check if device orientation is landscape left or right in swift?

前端 未结 7 1116
伪装坚强ぢ
伪装坚强ぢ 2021-02-03 21:22
    if UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation) {
        print(\"landscape\")
    }
    if UIDeviceOrientationIsPortrait(UIDevice.currentDev         


        
相关标签:
7条回答
  • 2021-02-03 21:46

    Swift 3+

    switch UIDevice.current.orientation {
    case .faceUp:
      print("flat - up")
    case .faceDown:
      print("flat - down")
    case .landscapeLeft:
      print("landscape - left")
    case .landscapeRight:
      print("landscape - right")
    case .portrait:
      print("portrait - normal")
    case .portraitUpsideDown:
      print("portrait - upsideDown")
    case .unknown:
      print("unknown")
    }
    
    0 讨论(0)
  • 2021-02-03 21:47

    SWIFT 4.2

    if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {
                    print("Landscape Left")
                } 
        else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight{
                    print("Landscape Right")
                } 
        else if UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown{
                   print("Portrait Upside Down")
                } 
        else if UIDevice.current.orientation == UIDeviceOrientation.portrait {
                    print("Portrait")
        }
    
    0 讨论(0)
  • 2021-02-03 21:48

    you can do something like,

    if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft{
    
    }
    else if UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight{
    
    }
    else if UIDevice.currentDevice().orientation == UIDeviceOrientation.UIDeviceOrientationPortraitUpsideDown{
    
    }
    else if UIDevice.currentDevice().orientation == UIDeviceOrientation.UIDeviceOrientationPortrait{
    
    }
    

    SWIFT 5

        if UIDevice.current.orientation.isLandscape {
    
        } else if UIDevice.current.orientation.isFlat {
    
        } else if UIDevice.current.orientation.isPortrait {
    
        } else if UIDevice.current.orientation.isValidInterfaceOrientation {
    
        }
    

    SWIFT 3

    if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {
    
    } else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
    
    } else if UIDevice.current.orientation == UIDeviceOrientation.portrait {
    
    } else if UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown {
    
            } 
    
    0 讨论(0)
  • 2021-02-03 21:49

    There is one thing that destroy all this answers - it's iOS9 iPad multitasking.

    On iOS 9, an iPad app by default opts into iPad multitasking. This means that it must adopt all orientations at all times. Since you have not opted out of iPad multitasking, the runtime assumes that you do adopt all orientations at all times — and thus it doesn't need to bother to ask you what orientations you permit, as it already knows the answer (all of them).

    To do right cell size for UICollectionView I do next :

    func collectionView(_ collectionView: UICollectionView, layout 
        collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    
            if UIDevice.current.userInterfaceIdiom == .phone {
                return CGSize(width: collectionView.frame.size.width, height: 120)
            } else {
                var width:CGFloat = 0
                let height = 250
                // because of iOS9 and iPad multitasking
                if (UIApplication.shared.statusBarOrientation.rawValue <= UIInterfaceOrientation.portraitUpsideDown.rawValue) {
                    width = (collectionView.frame.size.width - 3) / 3
                } else {
                    width = (collectionView.frame.size.width - 4) / 4
                }
                return CGSize(width: Int(width), height: Int(height))
            }
        }
    

    and inside viewWillTransition next:

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
            if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout {
                layout.invalidateLayout()
            }
    }
    

    because it works faster than without.

    0 讨论(0)
  • 2021-02-03 21:50

    Swift 5.0:

    UIDevice.current.orientation.isLandscape 
    UIDevice.current.orientation.isFlat
    UIDevice.current.orientation.isPortrait
    UIDevice.current.orientation.isValidInterfaceOrientation
    

    isFlat: Indicating whether the specified orientation is face up or face down (The device is held parallel to the ground with the screen facing downwards or Not).

    isValidInterfaceOrientation: Indicating whether the specified orientation is one of the portrait or landscape orientations.

    IMPORTANT NOTE:

    If you have set some views to landscape form manually, so "isLandscape" value is not correct.

    In this case you can use this condition:

    if UIScreen.main.bounds.height < UIScreen.main.bounds.width {
        print("LandScape Views")
        print("Portrait Views")
    }
    

    For example I wanted to play all videos in landscape form while my app was only for portrait form, so in video views I used this condition in order to check if the view is landscape or not, independent of the phone orientation.

    0 讨论(0)
  • 2021-02-03 21:52

    This works on Swift 3 & 4

    switch UIApplication.shared.statusBarOrientation {
        case .portrait:
            //do something
            break
        case .portraitUpsideDown:
            //do something
            break
        case .landscapeLeft:
        //do something
            break
        case .landscapeRight:
            //do something
            break
        case .unknown:
            //default
            break
     }
    
    0 讨论(0)
提交回复
热议问题