2014-10-06 65 views
2

我的iPad应用程序支持所有的方向,并且它在iOS 7中也能正常工作。iOS 8 - 在横向模式下启动应用程序

但是,在iOS 8中,以横向模式启动应用程序使我的登录视图在纵向框架内绘制横向视图。

做了一些分析后,我发现应用程序窗口在Landscape中启动时没有采取正确的方向。之后做旋转更正了用户界面,因为它从那时起就采用了正确的方向。

有人能够引导我通过这个?提前致谢。

回答

10

问题似乎是设置窗口时的调用顺序。在分配rootViewController之前,您需要拨打makeKeyAndVisible。以下作品:

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

感谢您的支持,它适用于我的情况。我有rootViewController都设置在.xib中,但是会自动设置rootViewController,所以我不得不中断连接。我认为这是苹果应该修复的错误。 – RickJansen 2014-10-26 12:52:15

+0

如果窗口是从xib派生的,该怎么办? – StudentX 2015-06-24 12:49:09

1

我在XIB中设置了根视图控制器,在我的导航控制器中放置了MainWindow.xib,并且导航ctlr的根视图控制器是我的实际根视图控制器的类。因此,它会自动找到我的根视图控制器,将其实例化,然后将其挂钩到导航控制器,并将其挂接到窗口。

但是:显然这在游戏中太早了,并且在横向模式下启动时会造成麻烦。

所以我打破了厦门国际银行窗口对根视图控制器的连接(即导航控制器),并设置根视图控制器自己:

self.window.rootViewController = self.navigationController; 

效果是一样的,在笔尖的连接,但随着时间的推移,现在它已经成为现实。

0

下面的代码为我工作

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 
    application.statusBarOrientation = UIInterfaceOrientationPortrait; 

    // the rest of the method 
} 

希望这将帮助!

2

谢谢戴夫Kammeyer为这个烦人的iOS8错误的解决方法。

如果您正在使用故事板,则您无法真正访问makeKeyAndVisible,因为UIApplication会自动将所有内容连接在一起,然后致电AppDelegate。在这种情况下,我只是重置rootViewControllerapplication:didFinishLaunchingWithOptions:

UIViewController* rootViewController = self.window.rootViewController; 
self.window.rootViewController = nil; 
self.window.rootViewController = rootViewController; 

开始之后的应用在景观开始​​没有错误。

+0

嗯,这是一个很好的提示,不幸的是,它不适用于2016年的iOS10等。Bummer ...我做的只是一个空的“预加载”场景,它只是加载实际的第一个场景。 – Fattie 2016-12-07 12:55:35

相关问题