У меня есть пустое приложение, в котором нет раскадровки или xib. Я хочу иметь скрытую строку состояния и поддерживать только ландшафтную ориентацию. Опять же, я не буду вносить эти изменения только в код и не касаюсь Info.plist.UIWindow с неправильным размером при использовании ландшафтной ориентации
Проблема
создать 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] неожиданное окно ноль в _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: UIClassicWindow: 0x7fa20b805e00; frame = (0 0; 375 667); userInteractionEnabled = NO; gestureRecognizers = NSArray: 0x7fa20b80a620; Слой = UIWindowLayer: 0x7fa20b806890
Я также выполнял различные другие изменения, как присоединение пустой UIViewController и добавление моего вида как суб-вид. В этом случае мое представление выглядит правильно, но окно по-прежнему использует неправильные размеры.
Все повернуто правильно, если я не переопределяю поддерживаемые методыInterfaceOrientations в контроллере просмотра. Но это, конечно, не то, что я хочу.
Спасибо за обмен. Я просто потратил много часов, пытаясь понять, как это сделать. –
С помощью iOS8.1 и с помощью Swift мне нужно было добавить небольшую долю к ширине и высоте UIWindow, чтобы решить мою проблему, как это делается здесь: http://stackoverflow.com/a/26452679/190599 – CodeReaper
Отлично работает, благодаря много. –