横向模式下的导航控制器堆栈,但模式呈现的视图控制器视图始终为纵向帧大小

时间:2012-10-28 10:52:57

标签: ios

我的应用程序主要使用导航控制器堆栈,有时会以模态方式显示某些控制器。在横向模式下,导航控制器堆栈中的控制器工作正常,但presentViewController或之前的presentModalViewController显示的其他视图控制器始终提供纵向大小视图框(在iOS iOS 6.0上始终为768x1024) - 即使在纵向和横向之间来回旋转。 / p>

A view controller is in landscape mode, but I'm getting the frame from portrait mode?有关但是经过检查的答案没有帮助。如果我将后一个视图控制器添加为导航堆栈的一部分,则首次加载和后续轮换时发生的调整大小会起作用。如上所述,当通过presentViewController添加控制器时,问题才会出现。

1 个答案:

答案 0 :(得分:3)

将模态分支包装到另一个导航控制器并在那里定义旋转蒙版。 在iOS6中,- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)仅适用于导航堆栈分支,整个分支应该以相同的方式工作。

所以,继承nav:

@interface CLNotRotatingNavController : UINavigationController

并在其.m中添加此

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

- (BOOL) automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
    return YES;
}

并将所有模态分支包装到此nav。这将在必要时锁定所有内容。