孩子UIViewControllers没有调用shouldAutorotate - iOS 7

时间:2014-05-30 17:41:43

标签: ios iphone objective-c ios7 autorotate

所以我搜索了几页并在堆栈溢出处找到了一些答案,但似乎没有任何工作。

我有一个根视图控制器。它有2个儿童视图控制器。 (基本内容视图和菜单覆盖)。

目标是让内容视图响应方向更改,但叠加菜单仅以纵向显示(设计选择在上下文中更有意义)

在我的根VC中,我以这种方式添加了我的孩子观点:

self.contentVC = [DELEGATE.storyboard instantiateViewControllerWithIdentifier:@"content"];
[self addChildViewController:self.contentVC];
self.contentVC.view.frame = self.view.bounds;
[self.view addSubview:self.contentVC.view];
[self.contentVC didMoveToParentViewController:self];

根VC已声明以下方法:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

-(BOOL)shouldAutomaticallyForwardAppearanceMethods{
    return YES;
}

-(BOOL) shouldAutomaticallyForwardRotationMethods{
    return YES;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

在我的conentVC中:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

在menuVC中:

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
    return NO;
}

我通过让rootVC在contentVC上调用一个定位和旋转元素的方法来编程解决这个问题,现在这个工作正常。我主要担心的是,如果苹果增加更多的屏幕尺寸,自动旋转的适应性会更强。我缺少自动旋转解决方案吗?

如上所述,我已经检查了一些帖子,并且知道已经讨论了类似的事情,但我发现的任何解决方案似乎都没有用。

2 个答案:

答案 0 :(得分:1)

你误解了shouldAutomaticallyForwardRotationMethods的作用。它仅转发这些方法(请参阅文档):

 willRotateToInterfaceOrientation:duration:
 willAnimateRotationToInterfaceOrientation:duration:
 didRotateFromInterfaceOrientation:

框架不需要在子项上调用supportedInterfaceOrientations:shouldAutorotate,因为现在只查询最顶层的视图控制器。 (例如,UINavigationController不再咨询其新推的孩子。)如果你的父母想咨询孩子,那很好;它应该继续并咨询他们。但这是你的电话,与shouldAutomaticallyForwardRotationMethods没有任何关系。

答案 1 :(得分:0)

您可以查看TARGETS-General-Deployment Info中的设备方向菜单 enter image description here