2013-10-31 62 views
3

我需要在控制器中運行viewDidLoad方法之前檢測設備方向。我嘗試了所有在其他問題中提出的解決方案,但我無法解決。如何在viewDidLoad之前檢測設備方向?

什麼在Xcode 5和iOS 7使用SotryBoard做到這一點的最好方法是什麼?

預先感謝您!

編輯:其實我使用

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

     switch ([[UIDevice currentDevice] orientation]) { 
      case (UIDeviceOrientationPortrait): 
       // landscape layout 
       break; 

      default: 
       // portrait layout 
       break; 
     } 

但它簡化版,工作...

解決:使用

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) { 
     // Portrait 
    } 

    if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft || [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeRight){ 
     // Landscape 
    } 
} 
+0

你需要做什麼? –

+1

不要混淆UIDeviceOrientation和UIInterfaceOrientation – jbat100

+0

你不應該在'viewDidLoad'做佈局。在這裏,您可以設置數據模型並初始化視圖,但所有佈局應該在'viewWillLayoutSubviews'中完成,其中'self.view.frame'將準確地表示當前幀,並考慮旋轉。 –

回答

2

嘗試檢查狀態欄方向:

UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 

還有一些viewDidLoad中發射前的幾個其他視圖控制器的方法。看看awakeFromNib和initWithCoder。

+0

編輯'[的UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]' –

3

[[UIDevice currentDevice] orientation]是你需要什麼?

+2

這可能不會沒有一個電話,如果狀態欄隱藏這不是工作,你有,請分享謝謝答任何其他建議工作與更多的細節 – KIDdAe

+0

問題... –