在不继承 UINavigationController 的情况下以编程方式更改 ViewController 的方向

Posted

技术标签:

【中文标题】在不继承 UINavigationController 的情况下以编程方式更改 ViewController 的方向【英文标题】:Programmatically change orientation of ViewController without subclassing UINavigationController 【发布时间】:2016-05-16 13:24:44 【问题描述】:

我正在编写一个包含UIViewController(和故事板)的模块,它可以被其他包装程序调用,所以我不能强制使用特定的UINavigationController的子类,但它可以被UINavigationController使用. 在这种情况下,我怎样才能改变我的ViewController 的方向?此外,只有一个 UIViewController 应该以编程方式更改方向。 我尝试使用UINavigationControllerDelegate,但它没有被调用。 (我尝试在 initviewDidLoad 上设置委托,但都没有工作) 有没有其他方法可以解决这个问题? 任何帮助将不胜感激。

【问题讨论】:

VC 的方向与 UINavigationController 有什么关系? 据我了解...如果我在 NavigationController 上更改 VC 的方向,我应该继承 NavigationController,并覆盖 supportedInterfaceOrientationsshouldAutorotate 【参考方案1】:

在 ViewController 的 viewDidAppear 方法中设置:

对于风景:

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];

纵向:

NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
    [[UIDevice currentDevice] setValue:value forKey:@"orientation"];

【讨论】:

不走运。事实上,我也需要切换按钮来改变方向。【参考方案2】:

UINavigationController 无关紧要。 supportedInterfaceOrientationsshouldAutorotate 没有被调用,因为 ios 9 (iPad) 阻止了它们。我可以在(目标设置)-常规-部署信息上检查需要全屏来解决这个问题。

这是我发现的(详细)。 https://***.com/a/33567990/1010443

【讨论】:

以上是关于在不继承 UINavigationController 的情况下以编程方式更改 ViewController 的方向的主要内容,如果未能解决你的问题,请参考以下文章

在不使用多重继承的情况下避免代码重复

为啥我们不能在不从 NSObject 继承类的情况下迅速采用协议?

Swift:在不相互继承的类之间共享方法和计算属性

如何在不重新实现方法的情况下从外部接口继承接口

为啥这个 CSS 中的元素相互抵消(在不涉及继承但带有注释的 HTML 中)彼此不相关?

在不继承 UINavigationController 的情况下以编程方式更改 ViewController 的方向