我明白这个问题(或类似的变体)已经被问了很多次,但仍然需要找到最佳方法来解决这个问题,而不必深入使用笨拙的hack。
我有一个具有以下布局的应用程序:
第一个
在
我还在
在我的
我的目标是拥有一个横向的视图,其中包含有效的横向CGRect坐标,我可以以此为基础来布置子视图。
我有一个具有以下布局的应用程序:
UITabBarController
↳ UINavigationController
↳ PortraitViewController
↳ LandscapeViewController
第一个
PortraitViewController
的rightBarButtonItem
被设置为一个UIBarButtonItem
,它调用landscapeButtonPressed:
方法。该方法将LandscapeViewController
推入视图控制器堆栈。在
LandscapeViewController
中,我在初始化期间将hidesBottomBarWhenPushed
设置为YES
,因为我只想让导航栏可见。我还在
loadView
和viewWillAppear:
中调用[UIApplication sharedApplication]
上的setStatusBarOrientation:UIInterfaceOrientationLandscapeRight
,然后在viewWillDisappear:
中将其设置回UIInterfaceOrientationPortrait
。在我的
shouldAutorotateToInterfaceOrientation:
实现中,我仅为UIInterfaceOrientationLandscapeRight
返回YES。
PortraitViewController
如下所示:
肖像视图 http://img.skitch.com/20091007-18ur7p3iubkrb1if5cak8wdxkb.png
LandscapeViewController
如下所示:
损坏的横向视图 http://img.skitch.com/20091007-f3ki1ga5m4ytkyg3wgwektp86e.png
正如您所看到的,视图没有正确旋转。如果在调用-[UIApplication setStatusBarOrientation:]
之前调用私有方法-[UIDevice setOrientation:]
,我可以使导航栏正确旋转,但我不想调用私有方法,并且似乎没有办法获取我的主视图的边界来布置子视图。使用私有方法会产生以下结果:
更好的横向视图 http://img.skitch.com/20091007-8ckbx6gpbiateju9qjgew4x3k2.png
有什么解决这个问题的想法吗?我的目标是拥有一个横向的视图,其中包含有效的横向CGRect坐标,我可以以此为基础来布置子视图。
YES
。 - Nathan de VriesUIInterfaceOrientationLandscapeLeft
而不是UIInterfaceOrientationLandscapeRight
... 是我的错误。 - Marcio