Ух ты, я потерял несколько дней из-за этой проблемы ... но я нашел решение!
У меня была та же проблема, что и у вас: метод presentModalViewController: animated: работал только в портретном режиме.
После долгих проб и ошибок я обнаружил, что причина в том, чтоУ меня было несколько активных контроллеров вида одновременно.Я реализовал систему навигации, которая переключалась между различными контроллерами представления, с одним родителем, управляющим дочерними элементами.(Я не мог использовать UINavigationController, потому что мне нужен был другой вид.)
Итак, мой корневой контроллер представления имел корневой объект представления и несколько дочерних контроллеров представления.Когда дочерний контроллер представления был активирован, его объект представления был добавлен как подпредставление к представлению корневого контроллера представления.
Методу presentModalViewController это не понравилось.Однако, как только я установил свойство parentViewController дочерних контроллеров представления, это сработало!
Проблема только в том, что parentViewController является свойством только для чтения.Вы должны расширить класс UIViewController, чтобы иметь к нему доступ.
@interface UIViewController (HelperExtension)
@property (nonatomic, assign) UIViewController *parent;
@end
@implementation UIViewController (HelperExtension)
- (UIViewController *)parent
{
return self.parentViewController;
}
- (void)setParent:(UIViewController *)parent
{
[self setValue:parent forKey:@"_parentViewController"];
}
@end
Таким образом, всякий раз, когда вы добавляете представление дочернего контроллера представления в ваш родительский контроллер представления, вызывайте метод "setParent:" после выполнения этого.,Тогда это будет работать!