Ho un'applicazione vuota e non sono coinvolti storyboard o xib. Voglio avere una barra di stato nascosta e supportare solo l'orientamento orizzontale. Ancora una volta, non voglio apportare tali modifiche solo all'interno del codice e non toccare Info.plist.UIWindow con dimensioni errate quando si utilizza l'orientamento orizzontale
Problema
creo un UIWindow con un controller che dice che l'unico orientamento supportato è paesaggio. In tal caso, la mia UIWindow viene creata nella dimensione della modalità verticale e non ruota. Il risultato atteso sarebbe uno schermo completamente ciano.
Questo è il mio delegato:
#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
Questo è il mio controller:
#import "AppViewController.h"
@implementation AppViewController
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
@end
Quello che ho provato finora
Se ho impostato il RootViewController dopo chiamando makeKeyAndVisible tutto sembra funzionare inizialmente.
self.window.backgroundColor = [UIColor cyanColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[AppViewController alloc] init];
Ci sono ancora alcuni problemi. Prima di tutto non mi piace perché sembra molto fragile. Secondo problema è che in un'applicazione più complessa che fissa un GLKViewController come RootViewController ottengo il seguente risultato (atteso non sarebbe un'area nera a sinistra):
Sembra che la barra di stato non è nascosto abbastanza presto. Diversi sistemi di riconoscimento gesto sono attivi e in GLKViewController e cliccando sull'area nero produce il seguente messaggio di registro:
2014-09-25 13: 20: 42,170 StackOverflowExample [6971: 107907] Finestra nil inatteso _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: UIClassicWindow: 0x7fa20b805e00; frame = (0 0; 375 667); userInteractionEnabled = NO; gestureRecognizers = NSArray: 0x7fa20b80a620; strato = UIWindowLayer: 0x7fa20b806890
Ho anche eseguito vari altri cambiamenti, come allegare un UIViewController vuoto e aggiungendo il mio vista come una sotto-view. In quel caso la mia vista sembra corretta ma la finestra sta ancora usando le dimensioni sbagliate.
Tutto gira correttamente se non sovrascrivo i metodi supportati InterfacciaOrientamenti nel mio controller di visualizzazione. Ma ovviamente non è quello che voglio.
Grazie per aver condiviso. Ho passato molte ore a cercare di capire come farlo. –
Con iOS8.1 e utilizzando Swift ho dovuto aggiungere una piccola frazione alla larghezza e all'altezza di UIWindow per risolvere il mio problema come fatto qui: http://stackoverflow.com/a/26452679/190599 – CodeReaper
Funziona alla grande, grazie a sacco. –