iOS保持状态栏的纵向

时间:2014-03-04 22:36:24

标签: ios

我有一个使用接近传感器的应用程序,但接近传感器在横向模式下不起作用。我听说如果你将状态栏保持在纵向模式下,传感器就能正常工作 我试过这个但是没用。

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

状态栏仍然切换为横向模式。

我该怎么办?

1 个答案:

答案 0 :(得分: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 - 它将包含引用(最好是 你的接近传感器,我建议你运行 背景线程。这将只支持肖像模式,所以你的 接近传感器可以正常工作(我希望)。
  • displayViewController - 它将包含您拥有的所有UI元素,并且仅支持横向模式
  • 您可以使用代理
  • 管理两者之间的沟通

此外,在RootViewController的viewDidApper之后,请使用presentViewController(iOS 6.0及更高版本)或presentModalViewController(iOS 5.x)选择器在屏幕上添加displayViewController的视图。使用[self.view addSubview: displayViewController.view];将不起作用(我从个人经验中说)。