一个UIWindow的根视图控制器不旋转为横向,在应用程序启动(UIWindow's roo

2019-06-23 12:42发布

我正在开发一个基于厦门国际银行,仅景观应用。 该应用程序在启动景观正确。 然而,在我的主视图控制器的观点呈现在肖像。 也就是说,旋转90度,使图像出现裁剪和不占用整个屏幕。 如果我用我的界面来呈现一个模式视图控制器,然后返回到主视图控制器,这个问题本身修正(视图呈现在横向)。 的Xcode 4.2下没有出现此问题。 它发生在升级到4.3的Xcode后,和所做的唯一的代码更改时我升级项目的设置会自动通过Xcode的实现。

基于其他职位的建议,我验证了我的Info.plist设置支持的界面取向和初始界面定位。 我推翻了我的每个视图控制器的shouldAutorotateToInterfaceOrientation方法仅适用于横向放置返回YES。 另外,我关掉自动调整大小的看法,因为我从来没有想要的视图的大小/方向改变。

基于在此链接[1]的思想,我怀疑问题是,视图不接收呼叫在发射来改变取向,可能是由于在除去的MainWindow.xib概念,它似乎是由以下取代的xcode的插入在AppDelegate.m代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    return YES;
}

我修改该方法,以产生从中我的ViewController类呈现的通用根视图控制器,如示于以下的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    ViewController* myViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.viewController = [[UIViewController alloc] init];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    [self.viewController presentModalViewController:myViewController animated:NO];
    return YES;
}

瞧! 这解决了我的问题。 但是,对我来说,感觉就像在基础层面的变化,我不想做在我开发了这一点。 我打算将我的根视图控制器现在是一个模式的看法。 有没有人有另一种解决这个问题?

提前致谢!

Answer 1:

我有同样的问题:它的意思是在景观是假设的ViewController总是在肖像的应用程序。 我做吨的变化对项目的info.plist,其中包括让主要的UIWindow这是景观根视图控制器的每一个方面。 它仍然没有奏效。 我终于解开所有的变化,只是增加了两行下面我的应用程序代表指出:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{
    [_window addSubview:[_viewController view]];
    glView = _viewController.glView;

    // THIS FIXED ORIENTATION FOR ME IN IOS 6
    _window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    // END

    ...my other setup code here...
}

没有别的是必要的。

看来,由于某种原因,在IOS 6所述的UIWindow根 - 视图 - 控制器设置有时在界面生成器忽略。 我相信我的推理是错误的地方,但我想这可能也有助于督促有人在一个更全面,更详尽的答案的方向。



Answer 2:

在iOS系统中8,设置窗口边框的UIScreen也是必要的,因为它不会自动更新。

self.window.frame = [UIScreen mainScreen].bounds;


文章来源: UIWindow's root view controller does not rotate to landscape at app launch