2014-03-04 64 views
2

我有一個應用程序使用接近傳感器,但接近傳感器不能在橫向模式下工作。我聽說如果你保持在縱向模式狀態欄它傳感器將工作 我試過這個,但它沒有奏效。iOS保持縱向狀態欄

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; 

狀態欄仍然切換到橫向模式。

我該怎麼辦?

回答

0

如果您希望將您的應用保持爲縱向模式而不管DeviceOrientation,我建議您將以下代碼添加到您的viewController中。

- (BOOL) shouldAutorotate{ 
    return NO; 
} 
- (NSUInteger) supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortrait; 
} 
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation{ 
    return UIInterfaceOrientationPortrait; 
} 

這將確保您的應用程序將在縱向模式下啓動,並留在肖像模式下,即使設備已打開。

編輯:爲了保持應用程序在橫向上只有肖像模式的一個視圖,將上面的代碼添加到您想限制到縱向模式的一個viewController。

以下函數添加到您的appDelegate:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    /* This is in order to allow views that do not support landscape mode to be able to load in 
    */ 
    return UIInterfaceOrientationMaskAll; 
} 

下面的代碼添加到您的其他視圖控制器:

- (BOOL) shouldAutorotate{ 
     return YES; 
    } 
    - (NSUInteger) supportedInterfaceOrientations{ 
     return UIInterfaceOrientationMaskLandscape; 
    } 
    - (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation{ 
     return UIInterfaceOrientationLandscapeRight; //you can choose either landscape orientation here 
    } 

我建議你使用這個層次:

  • RootViewController的 - 它將包含參考(最好是 強)到您的接近傳感器r,我建議你在後臺線程上運行 。這將只支持肖像模式,所以你的 接近傳感器將工作正常(我希望)。
  • displayViewController - 它將包含你的所有UI元素,並通過代表僅支持橫向模式
  • 你可以兩者之間的管理通信

而且,RootViewController的的viewDidApper後,請使用presentViewController(iOS 6.0及以上版本)或presentModalViewController(iOS 5.x)選擇器在屏幕上添加displayViewController的視圖。使用[self.view addSubview: displayViewController.view];將不起作用(我從個人經驗中發言)。

+0

這當然假設你使用的是iOS 6.0或更高版本 – Tcharni

+0

謝謝,但是我的應用程序是爲橫向模式而設計的,所以如果它是縱向模式,那麼它會搞亂一切。 – msweet168

+0

我編輯了我的答案,請讓我知道它現在是否有效:D – Tcharni