【问题标题】:UIWindow in iOS8 doesn't rotate correctlyiOS8 中的 UIWindow 不能正确旋转
【发布时间】:2014-11-07 23:26:54
【问题描述】:

我需要以编程方式加载情节提要,在 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]]; 以更正自动旋转。

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

【问题讨论】:

  • 为什么要创建 UIWindow 对象?该属性已在应用委托中合成。
  • 好的,那么“不能正确自动旋转”是什么意思?请记住,旋转和屏幕大小在 iOS8 中的处理方式不同。屏幕尺寸在 iOS8 中取决于方向。

标签: ios rotation ios8 uiwindow


【解决方案1】:

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

“您的应用程序的信息属性列表包含 UIMainStoryboardFile 键,但您还手动创建了一个 UIWindow,并在您的应用程序委托中手动加载了情节提要。

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

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

【讨论】:

    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 2016-09-02
    • 2014-09-28
    • 2019-02-28
    • 1970-01-01
    • 2020-01-21
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多