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

Posted

技术标签:

【中文标题】iOS - 支持特定视图控制器的旋转【英文标题】:iOS - support Rotations for specific ViewControllers 【发布时间】:2013-09-20 17:01:17 【问题描述】:

我有 3 个视图的层次结构

我为我的 NavigationViewController 创建了一个子类,并设置了一个属性Landscape,它确定每个 viewController 是否可以支持不同的方向。

此属性设置在每个视图控制器的ViewWillAppear 中:这非常有效。控制器 1 和 2 仅支持纵向,控制器 3 支持纵向和横向。

当我要返回 popping 控制器 3 以返回控制器 2 时出现问题 如果我在横向的控制器 3 中,然后单击后退按钮,我的控制器 2 以横向呈现给我:(控制器 2 不支持横向)

然后我必须旋转设备以使方向自行修复。 . . .

导航控制器中的代码 - (BOOL) 应该自动旋转 返回是;

- (NSUInteger)supportedInterfaceOrientations

   if (LandscapeOK) 
       // for iPhone, you could also return UIInterfaceOrientationMaskAllButUpsideDown
       return UIInterfaceOrientationMaskAll;
    else 
    return UIInterfaceOrientationMaskPortrait;

每个ViewControllers的代码ViewWillAppear方法

[(NavigationViewController *)[self navigationController] setLandscape:YES];

我的代码设置几乎与这个问题完全相同:同样的问题。大约一年前发布了问题,但还没有合适的解决方案 - 在查看列出的答案时

ios 6: How do I restrict some views to portrait and allow others to rotate?

【问题讨论】:

从 'Hierarchy' 中,你的意思是,你有一个父级 'NavigationViewController',上面有 'Landscape' 属性,而所有其他控制器(1、2 和 3)都派生自它? 是的 - 每个 VC 中都有一个按钮通向下一个 1 -> 2 -> 3 【参考方案1】:

鉴于 1.您对我的评论的回复, 2.您尝试过以下建议的解决方案:

iOS 6: How do I restrict some views to portrait and allow others to rotate?

据我所知,您可以在所有控制器中访问相同/公共属性 LandscapeOK。

当您从控制器 3 导航回控制器 2 时,我建议您在supportedInterfaceOrientations 中调试和检查 LandscapeOK 的值。

【讨论】:

以上是关于iOS - 支持特定视图控制器的旋转的主要内容,如果未能解决你的问题,请参考以下文章

iOS - viewController 包含和自动旋转

iOS 6.1 中用于自定义相机视图的自动旋转

在 iOS 9 中强制视图控制器方向

UIViewController 在 iOS 6 中能否支持比其父级更多的界面方向?

视图控制器在 iOS 7 中不旋转

旋转iOS后子视图控制器高度为零