1

У меня есть приложение, которое в основном использует только портретный режим. Однако, когда он представляет MFMailComposeViewController и MFMessageComposeViewController, он может поворачиваться к пейзажу. Это отлично работает до iOS 8, где они все еще вращаются, но их границы, похоже, следуют неправильной ориентации.MFMailComposeViewController и MFMessageComposeViewController имеют неправильные границы после вращения в iOS 8

У меня есть приложение в портретном режиме и присутствует один из этих контроллеров. Когда я повернуть телефон в пейзаже я получаю следующий результат:

MFMailComposeViewController:

enter image description here

MFMessageComposeViewController:

enter image description here

EDIT: Вот код для представления композиторы:

MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init]; 
mailComposeViewController.mailComposeDelegate = self; 
[mailComposeViewController setSubject:subject]; 
[mailComposeViewController setMessageBody:body isHTML:NO]; 

[self presentViewController:mailComposeViewController animated:YES completion:^{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
}]; 

EDIT: Если я инспектировать мнения в View Debugger я могу видеть, что хотя UIWindow повернут в ландшафтном ни один из нижележащих взглядов есть. Это включает UITransitionView и UILayoutContainerView.

+0

Я принимаю ваше создание освобождение в AppDelegate? Можете ли вы показать, что код – soulshined

+0

Вы думаете о приложении ' : supportedInterfaceOrientationsForWindow:' method? Мы не используем это. Вместо этого мы разрешаем портрет и пейзаж в plist, а затем используем 'shouldAutorotate' и' supportedInterfaceOrientations' в наших контроллерах. – pajevic

+0

Пожалуйста, добавьте демонстрационный проект –

ответ

-1

Методы, такие как willRotateToInterfaceOrientation:duration: и didRotateToInterfaceOrientation:, теперь устарели в iOS 8 и заменены на viewWillTransitionToSize:withTransitionCoordinator:. В зависимости от того, как вы обрабатываете вращения в своем приложении, вам, возможно, придется внести изменения в свой код, чтобы адаптироваться к новым методам.

+0

Мы вообще не используем эти методы. Кроме того, я считаю, что это повлияет только на наши собственные контроллеры представлений и nok 'MFMailComposeViewController'. – pajevic

0

Это не решение, но я поделился своим опытом. Я также создаю приложение, которое следит только за ориентацией на портрет. Но когда я пытаюсь открыть MFMailComposeViewController и MFMessageComposeViewController в любой ориентации устройства, он идет только в портрете.

Я проверил это только тогда, когда увидел вашу проблему. Я представляю их так же, как вы. Я делюсь целевыми настройками и записью .plist, которую я использовал. Посмотрите, поможет ли кто-нибудь из них.

Target General Settings

.plist Entry

+0

Rinto, ваше приложение ведет себя как ожидалось. У вас есть только портрет в ваших целевых настройках, и это будет включать 'MFMailComposeViewController'. С другой стороны, у меня есть портрет, пейзаж справа и пейзаж слева, поэтому мой «MFMailComposeViewController» сможет поворачиваться в альбом, который он делает. Просто это испортилось. – pajevic

+0

Хорошо. Между некоторыми изменениями ориентации, которые пришли с iOS 8. U может проверить то же самое в этой ссылке. [ссылка] (http://stackoverflow.com/questions/26523799/is-this-an-ios-8-bug-orientation-issue-on-rotation/27540586?) Я не думаю, что есть что-то для решения этой конкретной проблемы. Все еще бросая какой-то свет. –

0

Есть некоторые проблемы с iOS8, связанными с ротацией не работает должным образом. Стоит проверить это первым. Его простая одна строка редактируется в делегате приложения.

UISplitViewController rotation iOS8 not working as expected

+0

Рори, я подозревал что-то вроде этого сам, но я проверил, и, похоже, в проекте нет такого кода. – pajevic

+0

Если проект был создан вручную или создан последним xcode, тогда строка может не существовать. Кажется, он был создан xcode 5 или ранее, я думаю, но он никогда не удаляет его. Есть ли там другой код, который создает UIWindow? Если у раскадровки есть исходный набор контроллеров, я считаю, что код не требуется, и именно создание UIWindow в этой функции вызывает проблемы с ротацией: Аппаратное обеспечение вращается, но в окне нет, поэтому вы видите портрет в ландшафте. –

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