iOS8中的UIWindow无法正确旋转

时间:2014-11-07 23:26:54

标签: ios rotation ios8 uiwindow

我需要以编程方式加载故事板,在iOS7中,以下代码有效:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // need to comment out in iOS8
    self.window.backgroundColor = [UIColor cyanColor];
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    self.window.rootViewController = [storyboard instantiateInitialViewController];
    [self.window makeKeyAndVisible];
    return YES;
}

但是在iOS8(XCode 6.1)中,上面的代码没有正确自动旋转:

wrong rotationwrong rotation

我需要注释self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];以更正自动轮换。

知道第一行有什么不同吗?

1 个答案:

答案 0 :(得分:1)

好吧,我从developer forum找到答案。只需从应用程序的信息属性列表中删除UIMainStoryboardFile密钥。

  

"您的应用程序的信息属性列表包含UIMainStoryboardFile键,但您也手动创建了一个UIWindow,其中包含在您的应用程序委托中手动加载的故事板。

     

当信息属性列表中存在UIMainStoryboardFile键时,系统会在调用您的应用程序委托之前,使用与故障板中的UIMainStoryboardFile键值对应的初始视图控制器创建UIWindow对象。然后,您的应用委托会重复此过程,根据屏幕大小确定要加载的故事板,并使用故事板中的初始视图控制器创建另一个UIWindow。   由系统创建的窗口(作为第一窗口)首先接收方向改变通知。由于iOS 8.1中的更改​​,第一个窗口最终会阻止第二个窗口(您创建的窗口,关键窗口)响应方向更改。根据我所看到的情况,只有在未加载第一个Windows rootViewController视图时才会发生这种情况(原始窗口永远不可见)。我用工程方法澄清了细节,并将自己记录任何需要的错误报告。

     

您应用的解决方案是从应用的信息属性列表中删除UIMainStoryboardFile和UIMainStoryboardFile~ipad键。"

相关问题