HY, 我知道之前已经问过这个问题,但是我解决了所有的解决方案,没有解决我遇到的情况。
我的应用程序全部采用纵向格式,只有一个横向格式的视图控制器。
我向所有视图控制器添加了以下代码,以强制纵向方向,无论设备方向如何:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationMaskPortrait;
}
-(BOOL)shouldAutorotate{
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
-(void)ViewDidLoad()
{
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
}
如果设备设置为纵向模式,则viewController会正确打开,但如果设备在打开应用程序之前设置为横向模式,那么应用程序将启动横向启动画面并以部分视图打开横向视图控制器剪切,然后将其旋转到纵向模式,并保持屏幕的一部分被剪裁,如图所示。
在app delegate中:
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;;
}
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
在appDelegate中,就在将视图控制器添加到导航控制器之前,我添加了以下内容:
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationPortrait;
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];
感谢您就此问题提出任何建议。
如果有任何事情似乎不清楚或者可能需要任何信息,请澄清问题让我知道。
答案 0 :(得分:2)
这似乎是自iOS 11以来的一件新事物。我通过允许自动旋转来修复它,但仅支持肖像。
(BOOL)shouldAutorotate{
return YES;
}
(UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
答案 1 :(得分:0)
好的,我做了什么,它最终运作良好,希望它可以帮助某人:
在appDelegate中我正在提出以下内容:
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
为了介绍我正在使用appDelegate中的以下主视图:
self.navigationController = [[UINavigationControllerSub alloc] initWithRootViewController:libraryVC];
navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
portraitSize = CGSizeMake(navigationController.view.frame.size.width, navigationController.view.frame.size.height);
[self.window setRootViewController:navigationController];
在我从应用代表发起的主视图中,我需要它只是肖像我正在做以下事情:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate setShouldRotate:NO];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
}
当我想要启动一个我需要它成为风景的视图时,我在启动之前使用以下内容:
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate setShouldRotate:YES];
[UIApplication sharedApplication].statusBarOrientation = UIDeviceOrientationLandscapeLeft;
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIDeviceOrientationLandscapeLeft] forKey:@"orientation"];
答案 2 :(得分:0)