我有一个提供的视图控制器,支持所有的接口方向.但是,呈现视图控制器应仅支持纵向模式.
到现在为止还挺好.
但是,在iOS8中,当我在横向模式中关闭视图控制器WHILE时,横向模式保持不变.因为我将shouldAutorotate设置为NO,所以永远不会回转.
问题是,如何强制呈现VC返回肖像?
我目前已实施此解决方法:
- (BOOL)shouldAutorotate
{
if ([self interfaceOrientation] != UIInterfaceOrientationPortrait)
{
return YES;
}
else
{
return NO;
}
}
它允许将设备移动到纵向,并且它将保留在此处,因为在它的肖像自动旋转被禁用之后.
但在用户转动手机之前,它看起来很难看.
怎么逼呢?
最佳答案 我们遇到了完全相同的问题.
您可以通过代码以编程方式旋转它 –
if ([UIApplication sharedApplication].statusBarOrientation != UIInterfaceOrientationPortrait) {
NSNumber *value = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:value forKey:@"orientation"];
}
有2种可能的选择 –
1)在关闭呈现的viewController之前,如果是,则旋转为纵向
需要
2)解散后,在呈现viewController的“viewDidAppear”中旋转到肖像.
这个问题的一个问题是你不能传递一个完成块,但是你可以在iOS8中使用下一个回调:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
if (self.needToDismissAfterRotatation)
self.needToDismissAfterRotatation = NO;
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// dismiss
}];
}
}
顺便说一句,在iOS8中苹果对屏幕旋转的方式做了很大的改变,当应用程序旋转,屏幕旋转,UIWindow中的所有元素也旋转,这就是为什么当呈现的viewController旋转到横向时,呈现viewController旋转,即使它只支持肖像…
多年来我们一直在努力解决这个问题,最后我们提出了一个解决方案,将呈现的viewController放在一个新的UIWindow中,这样它就可以始终保持呈现viewController的状态.