【发布时间】:2012-07-04 17:45:33
【问题描述】:
我需要在 UIViewController 的 viewWillAppear 方法中获取界面方向。我所做的是:
if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
NSLog(@"Portrait");
else
NSLog(@"Landscape");
在横向时,我总是在 viewWillAppear 中获得纵向,在 viewDidAppear 中获得横向。为什么?
所以,我尝试使用 [[UIApplication sharedApplication] statusBarOrientation],但同样的情况发生了。我还尝试了 Stack Overflow 中发布的另一种解决方案:
UIDevice* device = [UIDevice currentDevice];
[device beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation currentOrientation = device.orientation;
[device endGeneratingDeviceOrientationNotifications];
这似乎正确地返回了方向,但现在我留下了将 UIDeviceOrientation 映射到 UIInterfaceOrientation 的问题,据我所知这是不可能的(无法映射面朝上和面朝下)。
这个问题有什么解决办法吗?
【问题讨论】:
-
如果您可以支持 iOS 5+,最好在 -viewWillLayoutSubviews 方法中完成这项工作。如果您的应用刚刚完成加载,则可能会在设置视图框架并且窗口已完成自身定向之前调用 -viewWillAppear。如果你在 iOS 4 中需要这些信息,你真的需要等待 -viewDidAppear 被调用。
-
如果你使用的是导航控制器,那么在 viewWillAppear 中检查 self.navigationController.interfaceOrientation 怎么样?
-
@JasonCoco 这对我来说非常适合。找到适用于 iOS4 的解决方案也会很有趣,但这很好。
-
@AntonHolmquist 也试过了,忘了说。我仍然总是肖像。你不是吗?
-
@JasonCoco 如果您使用评论中提供的信息回答问题,我会将其标记为已接受。这是迄今为止提供的唯一可行选项。
标签: ios uiviewcontroller uiinterfaceorientation