Mam pustą aplikację i nie ma w niej scenorysów lub ksyw. Chcę mieć ukryty pasek stanu i wspierać tylko orientację poziomą. Ponownie, nie będę dokonywał tych zmian tylko w kodzie i nie dotykam Info.plist.UIWindow z niewłaściwym rozmiarem w orientacji poziomej
Problem
tworzę UIWindow z kontrolerem, który mówi tylko obsługiwana orientacja jest krajobraz. W takim przypadku moje UIWindow jest tworzone w wymiarze trybu portretowego i nie obraca się. Oczekiwanym rezultatem będzie ekran całkowicie niebieski.
To mój pełnomocnik:
#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
To jest mój kontroler:
#import "AppViewController.h"
@implementation AppViewController
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
@end
Co Próbowałem tak daleko
Jeżeli ustawić rootViewController po wywołanie funkcji makeKeyAndVisible na początku wszystko wydaje się działać.
self.window.backgroundColor = [UIColor cyanColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[AppViewController alloc] init];
Nadal występują pewne problemy. Przede wszystkim nie podoba mi się to, ponieważ wydaje się bardzo delikatna. Drugim problemem jest to, że w bardziej złożonych aplikacji, które ustawia GLKViewController jako rootViewController otrzymuję następujący wynik (oczekiwane byłoby czarny obszar po lewej):
wygląda jak pasek stanu nie jest wystarczająco wcześnie ukryte. Kilka Recognizers gest są aktywne, a w GLKViewController i kliknięcie na czarny obszar daje następujący komunikat protokołu:
2014-09-25 13: 20: 42,170 StackOverflowExample: 107907 [6971] nieoczekiwane okna zera w _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: UIClassicWindow: 0x7fa20b805e00; frame = (0 0; 375 667); userInteractionEnabled = NIE; gestureRecognizers = NSArray: 0x7fa20b80a620; layer = UIWindowLayer: 0x7fa20b806890
Przeprowadziłem również różne inne zmiany, takie jak dołączenie pustego kontrolera UIViewCorminser i dodanie mojego widoku jako pod-widoku. W takim przypadku mój widok wygląda poprawnie, ale okno wciąż używa niewłaściwych wymiarów.
Wszystko obraca się poprawnie, jeśli nie zastępuję metod supportedInterfaceOrientations w moim kontrolerem widoku. Ale to oczywiście nie jest to, czego chcę.
Dzięki za udostępnienie. Spędziłem wiele godzin próbując dowiedzieć się, jak to zrobić. –
Dzięki iOS8.1 i użyciu Swiftu potrzebowałem dodać niewielki ułamek do szerokości i wysokości UIWindow, aby rozwiązać mój problem, tak jak tutaj: http://stackoverflow.com/a/26452679/190599 – CodeReaper
Działa świetnie, dzięki los. –