2014-11-07 3 views
0

нужно загрузить раскадровку программно, в iOS7 следующий код работает:UIWindow в iOS8 не вращается правильно

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // need to comment out in iOS8 
    self.window.backgroundColor = [UIColor cyanColor]; 
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    self.window.rootViewController = [storyboard instantiateInitialViewController]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Но в iOS8 (XCode 6.1), приведенный выше код не автоповорот правильно:

wrong rotation и wrong rotation

Мне нужно закомментировать self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; исправить автоповорота.

Любая идея, что первая строка делает то, что отличается?

+0

Почему вы создаете объект UIWindow? Это свойство уже синтезируется в приложении делегата. – joelg

+0

Итак, что вы подразумеваете под «не автоматически поворачивается правильно»? Помните, что в iOS8 по-разному обрабатываются вращения и размер экрана. Размер экрана зависит от ориентации в iOS8. – joelg

ответ

1

Ну, я нахожу ответ от developer forum. Просто удалите ключ UIMainStoryboardFile из списка свойств информации приложения.

«список информации о собственности вашего приложения содержит ключ UIMainStoryboardFile, но вы также вручную создать UIWindow с раскадровкой, загруженной вручную в вашем приложении делегата.

Когда ключ UIMainStoryboardFile присутствует в списке информации о недвижимости, система создает объект UIWindow с контроллером начального представления из раскадровки, соответствующим значению ключа UIMainStoryboardFile, до вызова делегата приложения. Затем делегат приложения повторяет этот процесс, определяя, какую раскадровку загружать на основе размера экрана и создавать другой UIWindow с контроллером исходного представления из раскадровки. Окно, созданное система, будучи первым окном, сначала получает уведомление об изменении ориентации. Из-за изменения в iOS 8.1 первое окно завершает блокировку второго окна (того, которое вы создали, окна ключа) от ответа на изменение ориентации. Из того, что я распознал, это происходит только в том случае, если первый вид окна rootViewController не загружен (исходное окно никогда не становится видимым). Я уточняю детали с инженерными данными и сам регистрирую все необходимые отчеты об ошибках.

Решение для вашего приложения, чтобы удалить ключи Ipad UIMainStoryboardFile и UIMainStoryboardFile ~ из списка информации собственности вашего приложения.»

Смежные вопросы