У меня есть пустое приложение, в котором нет раскадровки или xib. Я хочу иметь скрытую строку состояния и поддерживать только ландшафтную ориентацию. Опять же, я не буду вносить эти изменения только в код и не касаюсь Info.plist.
Проблема
Я создаю UIWindow с контроллером, который говорит, что только поддерживаемая ориентация - это пейзаж. В этом случае мой UIWindow создается в размерном режиме портрета и не вращается. Ожидаемым результатом будет экран, который полностью голубой.
Это мой делегат:
#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
Это мой контроллер:
#import "AppViewController.h"
@implementation AppViewController
- (BOOL)shouldAutorotate {
return YES;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft;
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
@end
То, что я пробовал до сих пор
Если я установил rootViewController после вызова makeKeyAndVisible, все, кажется, работает сначала.
self.window.backgroundColor = [UIColor cyanColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = [[AppViewController alloc] init];
Есть еще некоторые проблемы. Прежде всего мне это не нравится, поскольку он кажется очень хрупким. Вторая проблема заключается в том, что в более сложном приложении, которое устанавливает GLKViewController как rootViewController, я получаю следующий результат (ожидается, что не будет черной области слева):
Похоже, что строка состояния не скрыта достаточно рано. Несколько распознавателей жестов активны, а в GLKViewController и нажатии на черную область выводится следующее сообщение журнала:
2014-09-25 13: 20: 42.170 StackOverflowExample [6971:107907] неожиданное окно nil в _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: UIClassicWindow: 0x7fa20b805e00; frame = (0 0; 375 667); userInteractionEnabled = НЕТ; gestureRecognizers = NSArray: 0x7fa20b80a620; layer = UIWindowLayer: 0x7fa20b806890
Я также выполнил различные другие изменения, такие как присоединение пустого UIViewController и добавление моего представления в качестве подзадачи. В этом случае мое представление выглядит корректно, но окно по-прежнему использует неправильные размеры.
Все вращается правильно, если я не переопределяю методы supportedInterfaceOrientations в моем контроллере представления. Но это, конечно, не то, что я хочу.