将新视图推送到UINavigationViewController时强制纵向方向

时间:2009-12-01 08:07:12

标签: iphone objective-c

我有一个TabBar基础应用程序,它仅支持一个特殊视图(UINaviagtionController的根视图)的Landscape方向。现在我想为此导航控制器强制所有其他视图的纵向方向。 我试过用

[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait];

这很好用但是这段代码是私人api调用,我不能冒着被拒绝的风险。

我还尝试手动旋转下一个视图,但这只会旋转视图而不是导航或标签栏。

是否有类似的方法来强制改变方向?

1 个答案:

答案 0 :(得分:6)

目前无法做到这一点。 看看这个question,我有同样的问题。使用tabbar应用程序,您必须拥有自动旋转的所有内容,或者没有任何内容。您可以找到让shouldAutorotate在每个视图上以不同方式回答的方法,但实际上这不起作用。我不知道这是一个预期的行为还是一个bug,无论如何,我所知道的唯一可行的解​​决方案(不使用未记录的API)是自己管理轮换,而不是依赖于自动旋转。

这意味着换句话说,您需要启动方向通知(查看UIDevice,有方法可以启动和停止有关设备方向的通知),然后为每个要旋转的视图注册为观察者,并手动管理方向,像这样(不记得我在哪里得到这个片段):

// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
self.view.transform = transform;