模态 UINavigationController - 我无法停止旋转

Posted

技术标签:

【中文标题】模态 UINavigationController - 我无法停止旋转【英文标题】:Modal UINavigationController - I cant stop rotation 【发布时间】:2012-11-11 17:11:53 【问题描述】:

我正在使用情节提要,并且在 UITabBarController 中嵌入了 UINavigationController。 我推送一个视图控制器,然后从这个视图控制器中我呈现一个带有 UIViewController 的 MODAL UINavigationController。

问题是,当我在模态视图之前的所有视图都不能旋转时,模态视图控制器可以旋转。 如何停止允许任何旋转的模态导航控制器?

我已尝试添加:

-(NSUInteger)supportedInterfaceOrientations

    return UIInterfaceOrientationMaskPortrait;

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    return (interfaceOrientation == UIInterfaceOrientationPortrait);

谢谢

【问题讨论】:

您是否尝试过编辑 info.plist?使用支持的界面方向。 我对不同的视图使用其他方向,我只需要限制这个视图。 @Darren 在这里你应该选择相同的 ...***.com/questions/13023936/orientation-issue-in-ios-6/…。您可能会对此有所了解 我刚尝试更改 plist,但后来我的一些其他视图崩溃了 感谢 iOS 开发人员,我刚刚尝试过,但不幸的是 VC 仍在旋转 :( 【参考方案1】:

尝试分类 UINavigationController

@implementation UINavigationController (Rotation_IOS6)

-(BOOL)shouldAutorotate

    return [[self.viewControllers lastObject] shouldAutorotate];


-(NSUInteger)supportedInterfaceOrientations

    return [[self.viewControllers lastObject] supportedInterfaceOrientations];


- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

    return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];

【讨论】:

非常危险 - 一个类别将取代一个方法的初始实现,而您不知道UINavigationController 的方法中应用了哪些其他逻辑。更好的解决方案是创建您自己的 UIViewController 抽象子类(例如称为 MyAbstractViewController),其中包含您答案中的方法,并且无论何时您想要查看,不要子类 UIViewController,而是子类 MyAbstractViewController 这行得通。我用这些方法创建了一个 UINavigationController 子类,并将它用作模态视图之后的 NavController 类。这些和 TabController 中的那些都被调用,但它们使它工作。 deanWombourne,不确定这是否会起作用,因为将方法添加到 VC 不起作用。 @deanWombourne 子类化 UIViewController 不起作用。子类化 UINavigationController 确实如此。不过我同意,这个类别是危险的,子类是要走的路。 如果它有一个模型视图控制器.....,所以我建议使用 self.visibleViewController xxxx

以上是关于模态 UINavigationController - 我无法停止旋转的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 自定义模态过渡,导航栏太小

模态 UINavigationController - 我无法停止旋转

UINavigationController 按钮在模态呈现之前 layoutIfNeeded 时消失

呈现模态后 UINavigationController 布局损坏

弹出一个以模态方式呈现的 UINavigationController

模态 UINavigationController 隐藏但不关闭