所以我试图启动一个没有Storyboard的项目,我似乎无法弄清楚为什么UIWindow没有将自动旋转命令传递给根视图控制器。通过故事板,自动旋转起作用。如果我以编程方式创建窗口,则自动旋转不起作用。
这就是我在App Delegate中实例化窗口的方法:
window = UIWindow(frame: UIScreen.mainScreen().bounds)
if let window = window {
window.backgroundColor = UIColor.whiteColor()
window.makeKeyAndVisible()
let nc: SignInViewController = UIStoryboard(name: "Main", bundle: nil)
.instantiateViewControllerWithIdentifier("SignInViewController") as SignInViewController
window.rootViewController = nc
}
谢谢!
答案 0 :(得分:8)
你在使用故事板吗?如果是这样,您的应用程序中可能会有旧代码didFinishLaunchingWithOptions方法。
尝试删除以下代码行以及与UIWindow相关的任何其他代码:
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
只需要从AppDelegate.m文件中删除上一行。
答案 1 :(得分:2)
我认为您的代码是正确的,并且您正在看到XCode 6.1中的一个(很多)错误。
我使用你的代码尝试了一个非常简单的6.1应用程序,我可以试验这个bug。然后我降级到6.0.1并且我的应用程序的自动旋转是完美的。
我建议您降级到XCode 6.0.1并重试您的应用。
您可以从此处下载:Apple Downloads
答案 2 :(得分:1)
明确的答案是降级到XCode 6.0.1 - 我不推荐它。
1)如果您不使用故事板 (对此主题的回答!!)
转到 - >项目名称 - >目标 - >项目名称 - >部署信息 - > 主界面 - >将其清空
2)如果您使用故事板(不是主要答案)
你的AppDelegate应该看起来像......
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
return true
}
答案 3 :(得分:0)
确保在项目的常规设置
中启用设备方向向下滚动至设备方向,启用"人像","向左风景","向右风景"
有关“设备方向设置”的图片,请参阅iOS 8.1 auto rotation
答案 4 :(得分:0)
我刚解决了项目中的问题。
对我来说,解决方案是从以下代码中删除动画:
[self presentViewController: root animated: animated completion:^{
[AppDelegate singleton].window.rootViewController = root;
}];
现在只是
[AppDelegate singleton].window.rootViewController = root;
我不知道这是否能回答你的问题,但它解决了我认为是共同问题的实例。