iPhone iPad 兼容模式下的应用横向布局奇怪(我强制纵向)
iPhone app on iPad compatibility mode has strange layout in landscape (while I force portrait)
问题
如您所见,我的 iPhone 应用在横向模式下以 iPad 启动时布局非常奇怪。我强制应用程序的方向为纵向,但只有在横向模式下的 iPad 上(当我启动应用程序时)似乎将视图在纵向容器中旋转 90 度。此外,状态栏似乎是一个黑条,位于屏幕中间。
当我从纵向模式启动时,该应用程序似乎可以正常运行。
在横向模式下使用 iPad 启动应用程序时
在纵向模式下使用 iPad 启动应用程序时
我的代码&配置
该应用程序在 info.plist
中启用了所有 4 个方向(因为我根据哪个 viewController
处于活动状态动态切换方向)。
我强制应用程序在第一个 viewController
中使用:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
我尝试将 shouldAutorotate
设置为 NO
,但这没有任何区别。
我在 AppDelegate
didFinishLaunchingWithOptions
中启动我的应用程序的方式是:
[[UIApplication sharedApplication] setStatusBarHidden:NO];
// 1
UIStoryboard *mainStoryboard = nil;
mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
// 2
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];
[self.window makeKeyAndVisible];
if ([self.window respondsToSelector:@selector(tintColor)]) {
self.window.tintColor = [UIColor whiteColor];
}
奇怪的是,在 iPhone 上测试一切都 100% 正确。只有 iPad 兼容模式有这个问题。
问题
如何解决 iPad 兼容模式的方向问题?似乎我遗漏了一些只适用于 iPad 兼容模式的东西,因为 iPhone 不会发生这样的事情。
我在 Ashraf Tawfeeq 的帮助下解决了这个问题。我以前在 AppDelegate 的 didFinishLaunchingWithOptions
中还有代码,它可以为不同的设备切换情节提要文件。
我删除了相应的代码并将我应用程序 info.plist
中的 Main Interface
设置为我的故事板文件。
[[UIApplication sharedApplication] setStatusBarHidden:NO];
if ([self.window respondsToSelector:@selector(tintColor)]) {
self.window.tintColor = [UIColor whiteColor];
}
现在,应用程序在 iPad 上启动时可以正确调整方向。
问题
如您所见,我的 iPhone 应用在横向模式下以 iPad 启动时布局非常奇怪。我强制应用程序的方向为纵向,但只有在横向模式下的 iPad 上(当我启动应用程序时)似乎将视图在纵向容器中旋转 90 度。此外,状态栏似乎是一个黑条,位于屏幕中间。
当我从纵向模式启动时,该应用程序似乎可以正常运行。
在横向模式下使用 iPad 启动应用程序时
在纵向模式下使用 iPad 启动应用程序时
我的代码&配置
该应用程序在 info.plist
中启用了所有 4 个方向(因为我根据哪个 viewController
处于活动状态动态切换方向)。
我强制应用程序在第一个 viewController
中使用:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
我尝试将 shouldAutorotate
设置为 NO
,但这没有任何区别。
我在 AppDelegate
didFinishLaunchingWithOptions
中启动我的应用程序的方式是:
[[UIApplication sharedApplication] setStatusBarHidden:NO];
// 1
UIStoryboard *mainStoryboard = nil;
mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
// 2
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];
[self.window makeKeyAndVisible];
if ([self.window respondsToSelector:@selector(tintColor)]) {
self.window.tintColor = [UIColor whiteColor];
}
奇怪的是,在 iPhone 上测试一切都 100% 正确。只有 iPad 兼容模式有这个问题。
问题
如何解决 iPad 兼容模式的方向问题?似乎我遗漏了一些只适用于 iPad 兼容模式的东西,因为 iPhone 不会发生这样的事情。
我在 Ashraf Tawfeeq 的帮助下解决了这个问题。我以前在 AppDelegate 的 didFinishLaunchingWithOptions
中还有代码,它可以为不同的设备切换情节提要文件。
我删除了相应的代码并将我应用程序 info.plist
中的 Main Interface
设置为我的故事板文件。
[[UIApplication sharedApplication] setStatusBarHidden:NO];
if ([self.window respondsToSelector:@selector(tintColor)]) {
self.window.tintColor = [UIColor whiteColor];
}
现在,应用程序在 iPad 上启动时可以正确调整方向。