我的iPad应用程序支持所有方向,它在iOS 7中也运行良好。
但是在 iOS 8 中,以横向模式启动应用程序使我的登录视图在纵向框架内绘制横向视图。
在做了一些分析之后,我发现在横向中启动时,应用程序窗口没有采用正确的方向。之后进行旋转会更正UI,因为从那时起它采用了正确的方向。
有人能指导我完成这件事吗?提前谢谢。
答案 0 :(得分:10)
问题似乎是设置窗口时的调用顺序。在分配makeKeyAndVisible
之前,您需要致电rootViewController
。以下作品:
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
self.window.rootViewController = self.myMainViewController;
但如果您将订单更改为:
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = self.myMainViewController;
[self.window makeKeyAndVisible];
您会遇到您遇到的行为。
答案 1 :(得分:2)
感谢Dave Kammeyer为这个恼人的iOS8错误提供了解决方法。
如果您使用的是故事板,那么您实际上无法访问makeKeyAndVisible
,因为UIApplication
会在调用AppDelegate
之前自动连接所有内容。在这种情况下,我只是在rootViewController
application:didFinishLaunchingWithOptions:
UIViewController* rootViewController = self.window.rootViewController;
self.window.rootViewController = nil;
self.window.rootViewController = rootViewController;
之后,应用程序以横向开始,没有错误。
答案 2 :(得分:1)
我在XIB中设置了根视图控制器,方法是将我的导航控制器放在MainWindow.xib中,导航ctlr的根视图控制器是我实际的根视图控制器的类。因此,它会自动找到我的根视图控制器,实例化它,并将其挂钩到导航控制器,然后挂钩到窗口。
但是:显然在游戏中太早了,并且在横向模式下启动时会造成麻烦。
所以我打破了Window与xib中根视图控制器(作为导航控制器)的连接,并自己设置了根视图控制器:
self.window.rootViewController = self.navigationController;
效果与笔尖中的连接相同,但是在稍后的时间点发生它现在可以正常运行。
答案 3 :(得分:0)
以下代码对我有用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
application.statusBarOrientation = UIInterfaceOrientationPortrait;
// the rest of the method
}
希望它会有所帮助!!!