我有一个TabBar基础应用程序,它仅支持一个特殊视图(UINaviagtionController的根视图)的Landscape方向。现在我想为此导航控制器强制所有其他视图的纵向方向。 我试过用
[[UIDevice currentDevice] setOrientation:UIDeviceOrientationPortrait];
这很好用但是这段代码是私人api调用,我不能冒着被拒绝的风险。
我还尝试手动旋转下一个视图,但这只会旋转视图而不是导航或标签栏。
是否有类似的方法来强制改变方向?
答案 0 :(得分:6)
目前无法做到这一点。 看看这个question,我有同样的问题。使用tabbar应用程序,您必须拥有自动旋转的所有内容,或者没有任何内容。您可以找到让shouldAutorotate在每个视图上以不同方式回答的方法,但实际上这不起作用。我不知道这是一个预期的行为还是一个bug,无论如何,我所知道的唯一可行的解决方案(不使用未记录的API)是自己管理轮换,而不是依赖于自动旋转。
这意味着换句话说,您需要启动方向通知(查看UIDevice,有方法可以启动和停止有关设备方向的通知),然后为每个要旋转的视图注册为观察者,并手动管理方向,像这样(不记得我在哪里得到这个片段):
// Rotates the view.
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI/2);
self.view.transform = transform;