限制每个视图控制器的方向

Posted

技术标签:

【中文标题】限制每个视图控制器的方向【英文标题】:Restrict orientation per view controller 【发布时间】:2015-09-21 09:03:00 【问题描述】:

我想在每个视图控制器中说明他支持哪个方向并将其限制为它们。这是我尝试过的:

使用自定义导航控制器,例如我的 old posts 之一,但这似乎不再起作用。解决方法类似于ios 6 - (BOOL)shouldAutorotate not getting called for navigation controllers pushed viewControllers

我也尝试了Setting Orientation in Xamarin iOS,但应用程序在RootViewController 上崩溃。我在这里收到NullReferenceException

此外,我从 Shri Chakraborty (shrixamarin) 的已删除博客中尝试了 IOS 8 : Restricting orientation on a View Controller。如果我使用application:supportedInterfaceOrientationsForWindow:,应用程序也会在此处崩溃,因为RootViewController 为空。解决方案似乎类似于How do I restrict orientation per view controller in iOS7 in a navigation controller hierarchy

似乎没有任何解决方案有效。还是我错过了一些重要的事情?如何限制视图控制器 A 仅横向、视图控制器 B 仅纵向且视图控制器 C 可以以所有可用方向显示的方向?

【问题讨论】:

【参考方案1】:

在您的视图控制器中覆盖 GetSupportedInterfaceOrientations() 应该可以解决问题:

public override UIInterfaceOrientationMask GetSupportedInterfaceOrientations ()     
  return UIInterfaceOrientationMask.LandscapeRight;

您在此处返回的方向将与应用允许的方向(项目属性)或您在应用委托中允许的方向相交。因此,请务必在此处指定所有方向或要支持的方向的最大集合

查看这里documentation。

【讨论】:

非常感谢!我在我的视图控制器中删除了ShouldAutorotate() 的覆盖,现在它可以工作了。我正在使用我的CustomNavigationController。还有一个问题:如果我从视图控制器 A(仅横向)导航到视图控制器 B(仅纵向),则方向不会更新。尽管视图控制器 B 只允许纵向,但我处于横向状态。只有在旋转之后,行为才会再次正确。 如何从 A 导航到 B? UINavigationController推? NavigationController.PushViewController (testViewController, true); 您是否尝试过使用普通的UINavigationController 来查看您的自定义是否会造成问题? 并非如此。我刚刚做了一个演示项目,现在我知道你的问题是什么了。这是一个类似的问题:***.com/questions/6064900/… - 我的想法是拥有一个可以强制旋转的视图控制器并不是一个好的设计。

以上是关于限制每个视图控制器的方向的主要内容,如果未能解决你的问题,请参考以下文章

在单个视图控制器上支持多个方向

Objective c - UIActivityViewController 方向模式

iOS - 支持特定视图控制器的旋转

Iphone 方向和 2 个笔尖文件

呈现视图控制器中的方向更改未更新父视图控制器

更改 iPhone 中的方向时如何更改视图控制器的视图?