UIWindow avec de la bonne taille lors de l'utilisation de l'orientation paysage

J'ai une application vide et il n'y a pas de storyboard ou xib impliqués. Je veux avoir caché la barre de statut et de soutien seulement l'orientation paysage. Encore une fois, je wan ' t à faire de ces modifications uniquement dans le code et ne touchez pas l'Info.plist.

Problème

- Je créer un UIWindow avec un contrôleur qui dit que la seule prise en charge de l'orientation est paysage. Dans ce cas, ma UIWindow est créé dans la dimension de la mode portrait et ne tourne pas. Le résultat attendu serait un écran qui est complètement cyan.

UIWindow avec de la bonne taille lors de l'utilisation de l'orientation paysage

C'est mon délégué:

#import "AppDelegate.h"
#import "AppViewController.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  self.window.backgroundColor = [UIColor cyanColor];
  self.window.rootViewController = [[AppViewController alloc] init];
  [self.window makeKeyAndVisible];
  return YES;
}

@end

C'est mon contrôleur:

#import "AppViewController.h"

@implementation AppViewController

- (BOOL)shouldAutorotate {
  return YES;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
  return UIInterfaceOrientationLandscapeLeft;
}

- (BOOL)prefersStatusBarHidden {
  return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
  return UIInterfaceOrientationMaskLandscape;
}

@end

Ce que j'ai essayé jusqu'à présent

Si j'ai mis le rootViewController après l'appel de makeKeyAndVisible tout semble au premier abord.

self.window.backgroundColor = [UIColor cyanColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[AppViewController alloc] init];

Il ya encore quelques problèmes. Tout d'abord, je n'aime pas cela, car il semble très fragile. Deuxième problème, c'est que dans une application plus complexe qui définit un GLKViewController comme le rootViewController j'obtiens le résultat suivant (qui devrait serait pas de zone noire sur la gauche):

UIWindow avec de la bonne taille lors de l'utilisation de l'orientation paysage

Il ressemble à la barre d'état n'est pas caché assez tôt. Plusieurs modules de reconnaissance de geste sont actif et, dans le GLKViewController et en cliquant sur la zone noire donne le message du journal suivant:

2014-09-25 13:20:42.170 StackOverflowExample[6971:107907] inattendu néant fenêtre
_UIApplicationHandleEventFromQueueevent, _windowServerHitTestWindow: UIClassicWindow: 0x7fa20b805e00; frame = (0 0; 375 667);
userInteractionEnabled = NON; gestureRecognizers = NSArray:
0x7fa20b80a620; couche = UIWindowLayer: 0x7fa20b806890

J'ai aussi effectué d'autres modifications, comme la fixation d'un vide UIViewController et l'ajout de mon point de vue comme une sous-vue. Dans ce cas, de mon point de vue est correct, mais la fenêtre est toujours à l'aide de l'mauvaises dimensions.

Tout tourne correct si je ne remplacent pas les supportedInterfaceOrientations méthodes de mon point de vue contrôleur. Mais cela n'est évidemment pas ce que je veux.

InformationsquelleAutor Joa Ebert | 2014-09-25