2011-03-10 73 views
1

像往常一样我有一个UIViewController的子类。当我加载应用程序时,我需要调整一些必须以编程方式放置的元素。当然,大小取决于接口方向:所以,我所做的:UIViewController interfaceOrientation问题

- (void)viewDidLoad { 
    switch([self interfaceOrientation]) { 
    case UIInterfaceOrientationPortrait: 
    case UIInterfaceOrientationPortraitUpsideDown: 
      NSLog(@"Portrait"); 
      break: 
    case UIInterfaceOrientationLandscapeLeft: 
    case UIInterfaceOrientationLandscapeRight: 
      NSLog(@"Landscape"); 
      break; 
    } 

但是,没有模拟器/设备的方向的事情,情况总是肖像在viewDidLoad中/ WillAppear,即使一切正常旋转。 在Plist中,我添加了所有支持的方向。 提示?

+0

碰到完全相同的问题!这在模拟器中一直是个问题。 最好的是:打破“willRotate”,它告诉你它会旋转到风景。接下来它在layoutSubview中打破。如果你检查那里的方向,它是肖像! WTF? – Krumelur 2011-11-03 20:44:13

+0

难道你应该重写'shouldAutorotateToInterfaceOrientation'并返回YES吗?如果你这样做,把你的代码移到那个方法。 – Mazyod 2012-05-19 04:55:44

回答

8

尝试[UIApplication sharedApplication].statusBarOrientation和交换机检查UIDeviceOrientationPortraitUIDeviceOrientationPortraitUpsideDown等因为[self interfaceOrientation]在我的经验中是不可靠的。

+0

我从来没有尝试过使用statusBarOrientation。该设备的一个是无用的,因为它告诉你,如果你把iPad放在桌子上。 – IssamTP 2011-04-01 18:49:33

+0

状态栏提示保存了我的一天。 UISplitViewController总是返回prortrait。 – Krumelur 2011-04-13 10:20:34

+0

statusBarOrientation返回一个UIInterfaceOrientation(而不是UIDeviceOrientation),所以你应该使用UIInterfaceOrientationPortrait(),否则你偶尔会得到奇怪的结果。 – ToddH 2012-10-24 17:11:42

0

我正在处理iOS应用程序的旋转和方向。我发现self.interfaceOrientation将永远给你一个正确的结果,如果在viewDidAppear或之后调用。

[UIApplication sharedApplication] .statusBarOrientation应该是直接添加视图到UIWindow的首选。

希望它有帮助。

相关问题