所以我搜索了几页并在堆栈溢出处找到了一些答案,但似乎没有任何工作。
我有一个根视图控制器。它有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上调用一个定位和旋转元素的方法来编程解决这个问题,现在这个工作正常。我主要担心的是,如果苹果增加更多的屏幕尺寸,自动旋转的适应性会更强。我缺少自动旋转解决方案吗?
如上所述,我已经检查了一些帖子,并且知道已经讨论了类似的事情,但我发现的任何解决方案似乎都没有用。
答案 0 :(得分:1)
你误解了shouldAutomaticallyForwardRotationMethods
的作用。它仅转发这些方法(请参阅文档):
willRotateToInterfaceOrientation:duration:
willAnimateRotationToInterfaceOrientation:duration:
didRotateFromInterfaceOrientation:
框架不需要在子项上调用supportedInterfaceOrientations:
和shouldAutorotate
,因为现在只查询最顶层的视图控制器。 (例如,UINavigationController不再咨询其新推的孩子。)如果你的父母想咨询孩子,那很好;它应该继续并咨询他们。但这是你的电话,与shouldAutomaticallyForwardRotationMethods
没有任何关系。
答案 1 :(得分:0)