【发布时间】:2014-10-06 07:24:34
【问题描述】:
我的 iPad 应用程序支持所有方向,并且在 iOS 7 中也能正常工作。
但是在 iOS 8 中,以横向模式启动应用程序会使我的登录视图在纵向框架内绘制横向视图。
在做了一些分析后,我发现应用程序窗口在横向中启动时方向不正确。之后进行旋转会更正 UI,因为它从那时起采用正确的方向。
有人能指导我完成这个吗?提前致谢。
【问题讨论】:
标签: ios ipad ios8 orientation xcode6
我的 iPad 应用程序支持所有方向,并且在 iOS 7 中也能正常工作。
但是在 iOS 8 中,以横向模式启动应用程序会使我的登录视图在纵向框架内绘制横向视图。
在做了一些分析后,我发现应用程序窗口在横向中启动时方向不正确。之后进行旋转会更正 UI,因为它从那时起采用正确的方向。
有人能指导我完成这个吗?提前致谢。
【问题讨论】:
标签: ios ipad ios8 orientation xcode6
问题似乎是设置窗口时的调用顺序。在分配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];
你得到你正在经历的行为。
【讨论】:
感谢 Dave Kammeyer 解决这个恼人的 iOS8 错误。
如果您正在使用情节提要,您实际上无法访问makeKeyAndVisible,因为UIApplication 在调用AppDelegate 之前会自动将所有内容连接在一起。在这种情况下,我只是在application:didFinishLaunchingWithOptions:的开头重置rootViewController
UIViewController* rootViewController = self.window.rootViewController;
self.window.rootViewController = nil;
self.window.rootViewController = rootViewController;
然后应用程序以没有错误的横向启动。
【讨论】:
我在 XIB 中设置了根视图控制器,在 MainWindow.xib 中设置了我的导航控制器,并且导航 ctlr 的根视图控制器是我实际的根视图控制器的类。因此,它会自动找到我的根视图控制器,将其实例化,并将其连接到导航控制器,然后连接到窗口。
但是:显然这在游戏中为时过早,并且在横向模式下开始时会造成麻烦。
所以我在 xib 中断开了 Window 与根视图控制器(作为导航控制器)的连接,并自己设置了根视图控制器:
self.window.rootViewController = self.navigationController;
效果与笔尖中的连接相同,但由于它发生在稍后的时间,现在可以了。
【讨论】:
以下代码对我有用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
application.statusBarOrientation = UIInterfaceOrientationPortrait;
// the rest of the method
}
希望对你有帮助!!!
【讨论】: