【问题标题】:Navigation controller stack in landscape mode, but modally presented view controller view always in portrait frame size横向模式下的导航控制器堆栈,但总是以纵向帧大小模态呈现视图控制器视图
【发布时间】:2012-10-28 10:52:57
【问题描述】:

我的应用主要使用导航控制器堆栈,有时会模态显示一些控制器。在横向模式下,导航控制器堆栈中的控制器工作正常,但 presentViewController 或以前的 presentModalViewController 显示的其他视图控制器始终提供纵向尺寸的视图框架(在 iPad iOS 6.0 上始终为 768x1024) - 即使在纵向和横向之间来回旋转也是如此。

有点与A view controller is in landscape mode, but I'm getting the frame from portrait mode? 相关,但检查的答案没有帮助。如果我将稍后的视图控制器添加为导航堆栈的一部分,则在第一次加载和后续旋转时会发生调整大小。如上所述,只有在通过 presentViewController 添加控制器时才会出现问题。

【问题讨论】:

    标签: ios


    【解决方案1】:

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

    所以,子类化导航:

    @interface CLNotRotatingNavController : UINavigationController
    

    并在其 .m 中添加此

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
        return NO;
    }
    
    - (NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskLandscape;
    }
    
    - (BOOL) automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers {
        return YES;
    }
    

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

    【讨论】:

    • 太棒了。有用。我添加了模态控制器(我只有一个)作为 CLNotRotatingNavController 的根控制器(我实际上允许为 iPad 旋转,但只为 iPhone 旋转,因为我有一个通用应用程序)并使用 presentViewController 显示它。使用dismissViewControllerAnimated 关闭。不错的解决方法。但是让您想知道我们是否从一开始就做错了什么,或者这是否是 iOS 的错误(功能)?我记得两年前提交了一个关于类似错误的错误 - 一年后苹果回应说他们修复了这个错误。 :-P
    • 他们称之为功能,这不是一个错误,因为他们是故意这样做的(甚至记录在案),但我找不到任何理由证明这一举动是合理的。我花了两天时间才弄明白。 ://
    • @whiteagle: 这显示错误请提供一些代码以在 customNavigation 控制器中显示模型视图控制器
    • 我不知道为什么 Apple 决定改变这种行为。我想不出破坏此功能的任何合乎逻辑的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多