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.
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):
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.
Vous devez vous connecter pour publier un commentaire.
Lorsque vous exécutez paysage application de portrait mode UIScreen a portrait limites dans iOS 8 (seulement si vous n'avez pas cette application dans l'app panneau de commande, comme iOS 8 permet à certains de cache). Même en affichant la fenêtre avec
makeKeyAndVisible
ne pas en modifier le cadre. Mais il change[UIScreen mainScreen].bounds
selonAppViewController
disponible d'orientation.Donc, nous allons changer de châssis de fenêtre après
[self.window makeKeyAndVisible]
Je pense que c'est iOS 8 bug.
J'ai eu un problème similaire, pour un portrait-seule application.
J'ai résolu le problème en mettant la barre de statut d'orientation AVANT d'instancier la
UIWindow
Dans votre cas, vous devez utiliser
UIInterfaceOrienationLandscapeLeft
(ou à Droite) dans lesetStatusBarOrientation:animated:
méthode.Espère que cela vous aide.
Personnellement, aucun de la solution présentée ci-dessus a travaillé. J'ai finalement mis "caché" sur " OUI " pour la fenêtre de ma principale xib, comme l'a suggéré la première fois ici: inattendu néant fenêtre dans _UIApplicationHandleEventFromQueueevent, _windowServerHitTestWindow
Le problème est résolu lors de l'ajout d'un Écran de Lancement, qui vous ne pouvez le faire par l'ajout d'un supplément de propriété à l'info.plist
eu ce problème moi-même, je ne suis pas sûr si vous pouvez l'ajouter dans le code si, j'ai seulement réussi à le faire fonctionner avec info.plist + l'Écran de Lancement de fichier xib
En fait, je ne pense pas que vous ayez à ajouter un fichier xib, si seulement la clé (avec n'importe quelle valeur) est disponible dans le fichier plist, il doit travailler.
Aucune des solutions posté ici ou ailleurs travaillé pour moi.
Cependant, j'ai trouvé que cette question ne semble pas se produire avec les Storyboards, donc, une autre solution est de partir d'xibs. (Cela fait malheureusement aussi, il est peu probable que Apple va prendre le problème au sérieux.)