我一直在寻找解决方案几个小时!
因此,在到处实施所需的方法之后。shouldAutorotate
不需要设置,YES
因为它已经设置为默认值:
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationPortrait;
}
当需要显示UIViewController
哪个需要与其他视图不同的方向时,我在UIStoryboardSegue
内部创建了一个具有此实现的:
#import "Showing.h"
@implementation Showing
- (void)perform{
NSLog(@"Showing");
UIViewController *sourceVC = self.sourceViewController;
UIViewController *presentingVC = self.destinationViewController;
[sourceVC.navigationController presentViewController:presentingVC
animated:YES
completion:nil];
}
@end
在里面,UIStoryboard
我将视图与这个 segue 连接起来(显示):
这很重要,您正在使用
presentViewController:animated:completion:
并不是
pushViewController:animated:
否则将无法再次确定方向。
我一直在尝试像
[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
或者这个在方向应该改变的地方,我也试着在我的自定义之前UIViewController
调用它:UIStoryboardSegues
presentingViewController
dismissViewController
[UIViewController attemptRotationToDeviceOrientation];
或者
NSNumber *numPortrait = [NSNumber numberWithInt:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:numPortrait forKey:@"orientation"];
但没有一个人工作。当然最后一个例子不应该是一个选项,因为如果苹果会改变他们的任何 api 这可能会导致你的应用程序内部出现问题。
我也尝试使用该AppDelegate
方法,并在寻找UIInterfaceOrientation
实际的正确方向后始终确定该方法内部的方向,visibleViewController
但有时在从一个方向切换到另一个方向时会发生崩溃。所以我仍然想知道为什么它变得如此复杂,而且似乎也没有任何文档可以正确解释它。即使遵循这部分也对我没有帮助。