我需要以编程方式加载情节提要,在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)中,上面的代码无法正确自动旋转:

 和

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

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

最佳答案

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


  “您的应用程序的信息属性列表包含UIMainStoryboardFile键,但是您还手动创建了一个UIWindow,并在应用程序委托中手动加载了一个故事板。
  
  当UIMainStoryboardFile键存在于信息属性列表中时,系统会在调用您的应用程序委托之前,从情节提要中使用与UIMainStoryboardFile键的值相对应的情节提要创建带有初始视图控制器的UIWindow对象。然后,您的应用程序代表重复此过程,根据屏幕大小确定要加载的情节提要,并使用情节提要中的初始视图控制器创建另一个UIWindow。
  系统创建的窗口是第一个窗口,它首先接收方向更改通知。由于iOS 8.1中的更改​​,第一个窗口最终导致第二个窗口(您创建的窗口,关键窗口)无法响应方向更改。根据我的了解,这仅在未加载第一个窗口rootViewController的视图时发生(从不使原始窗口可见)。我正在通过工程技术澄清这些细节,并将自己记录所有需要的错误报告。
  
  您的应用程序的解决方案是从应用程序的信息属性列表中删除UIMainStoryboardFile和UIMainStoryboardFile〜ipad键。”

关于ios - iOS8中的UIWindow无法正确旋转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26811752/

10-12 13:10