The possible values for UIDevice.orientation
include UIDeviceOrientationFaceUp
and UIDeviceOrientationFaceDown
. While it might be useful to know that the device is flat, this doesn't tell us whether it's flat displaying an interface oriented in portrait or landscape mode. Is there a way to find the current orientation of the GUI in cases where the device is returning ambiguous information? I suppose I could track orientation change events to remember the last portrait/landscape orientation or check the main UIView's bounds height and width, but that seems kludgey. Is there a property on the device or UIView that I'm missing?
相关问题
- CALayer - backgroundColor flipped?
- Core Data lightweight migration crashes after App
- How can I implement password recovery in an iPhone
- how do you prevent page scroll in textarea on mobi
- Custom UITableview cell accessibility not working
相关文章
- Could I create “Call” button in HTML 5 IPhone appl
- Xcode: Is there a way to change line spacing (UI L
- Unable to process app at this time due to a genera
- How do you detect key up / key down events from a
- “Storyboard.storyboard” could not be opened
- Open iOS 11 Files app via URL Scheme or some other
- Can keyboard of type UIKeyboardTypeNamePhonePad be
- Can not export audiofiles via “open in:” from Voic
Here's a codesnippet you might find useful:
If you just care that the device is landscape or portrait, there's some nice convenience methods on the viewcontroller:
Status bar orientation (statusBarOrientation) always returns the interface orientation even if the status bar is hidden.
You can use the status bar orientation without a view controller. It gives you the current view orientation, not the device orientation.
I've seen the same situation. Specifically in this flow:
At this point, any orientation checks I've seen return an invalid orientation of 5, so it's not directly possible to determine if a landscape or portrait layout should be used. (I'm doing custom layout positioning on a per-orientation basis, so this is significant information)
In my case, a bounds width check on the view is used to determine the true state of things, but I'd love to know if others have addressed differently.
In a viewcontroller you can simply use the code:
The UIInterfaceOrientation is an enum:
You can get orientation by 3 ways:
UIInterfaceOrientation orientation = self.interfaceOrientation;
returns UIInterfaceOrientation, current orientation of the interface. It is a property in UIViewController, you can access to this one only in UIViewController classes.UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
returns UIInterfaceOrientation, current orientation of the application's status bar. You can access to that property in any point of your application. My experience shows that this is the most effective way to retrieve real interface orientation.UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
returns UIDeviceOrientation, device orientation. You can access to that property in any point of your application. But note that UIDeviceOrientation is not always UIInterfaceOrientation. For example, when your device is on a plain table you can receive unexpected value.