导航控制器pushViewController在横向和纵向视图之间转换不起作用?

时间:2014-01-22 18:21:33

标签: ios iphone objective-c uiviewcontroller uinavigationcontroller

我正在尝试在支持使用导航控制器和pushViewController(和IOS6 +代码)工作的横向纵向方向的视图之间进行导航,并且在将景观视图控制器推到导航控制器堆栈,视图控制器视图正确处于横向状态,但设备仍处于纵向方向。 (想象一个在横向屏幕上从左到右指向的箭头,这里它在纵向屏幕上从下向上指向所以尺寸是正确的 - 它只是设备应该处于横向模式,所以箭头从左到右指向 - 如果这样做义)

我有一个我的不同子模式使用的portraitViewController和landscapeViewController。

使用iOS 6方法,两个类重载

-(BOOL)shouldAutorotate;
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
-(NSUInteger) supportedInterfaceOrientations;

适当。

我也有自己的派生导航控制器,它会覆盖:

-(BOOL)shouldAutorotate;
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation;
-(NSUInteger) supportedInterfaceOrientations;

函数返回顶视图控制器的相同功能(因此我们不受顶级视图控制器的纵向模式限制)。

我的第一个问题是,当您将pushViewController用于导航控制器时,设备不会进行方向刷新。这有很好的文档,到目前为止已经通过使用dismissViewController和presentViewController来解决,它强制进行设备方向刷新,进而查询新视图控制器它支持的方向并适当地切换设备。

这有效但在视图控制器之间失去转换(即从屏幕右侧滑入新视图),因为在添加下一个视图之前从屏幕上移除了先前的视图,并且新呈现的视图应用于整个屏幕直接

因此,我一直在尝试使用pushViewController而不是present / dismissViewController。当我从纵向视图导航到纵向视图时,pushViewController工作正常 - 新视图很好地滑动 - 当我从纵向视图控制器切换到横向视图控制器时,它会比事情中断。

只是pushViewController不会导致设备刷新它的方向并查询新视图要使用的内容。在调用pushViewcontroller强制使用新的视图控制器进行方向检查之前,我已经添加了对present / dismissModalViewController的调用。

*问题*

但是这不起作用,因为视图现在处于横向模式,但设备仍处于纵向模式,因此视图应该是90度。

我尝试通过设置状态栏方向以匹配视图控制器横向方向来解决此问题,但是当用户手动旋转设备时,这会导致大量问题,因为它们不同步。同样在iOS 6中,如果您的视图控制器从shouldAutoRotate函数返回YES,则无法执行此操作(如果您在视图控制器中自己控制方向,则会忽略对setStausBarOrientation的调用)因此需要进行大量操作才能执行此操作并且它只是没有感觉像是正确的解决方案。

总结一下,我如何使用导航控制器& pushViewController(使用iOS6)并在横向和纵向视图之间正确切换?目前,我无法让设备随视图一起更新,因此界面处于横向状态,但设备仍处于纵向状态。如果我尝试使用setStatusBarOrientation来强制设备横向移动,那么一旦我手动旋转屏幕就会出现问题并且它需要这样的黑客攻击它就不是正确的答案。

谢谢!

: - )

0 个答案:

没有答案