Ландшафтное приложение IOS выдает исключение при представлении модального viewController

Для справки, я использую Xcode 6.1 и ориентирован на IOS 7.1. Похоже, что есть сообщения с похожими проблемами, но предложения не сработали для меня. У меня есть приложение, которое я разработал для работы только в ландшафтном режиме. Поэтому я настроил проект на поддержку только альбомной ориентации вправо и альбомной ориентации слева. Но когда в моем коде я хочу представить новый viewController, приложение выдает исключение и вылетает в операторе "presentViewController" в приведенном ниже коде:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    PhotoViewController *photoVC = [storyboard
                                  instantiateViewControllerWithIdentifier:@"PhotoViewController"];
    // Configure the new view controller here.

    //photoVC.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height);

    photoVC.view.frame = CGRectMake(0,0,568, 320);

    [self presentViewController:photoVC animated:YES completion:nil];

Кстати, в целях тестирования я установил 568 и 320 для ширины и высоты.

Сообщение об ошибке говорит:

uncaught исключение 'NSInternalInconsistencyException', причина: 'Autolayout > не поддерживает пересечение трансформаций вращательных границ с ограничениями макета ребра>, такими как вправо, влево, сверху, снизу. Вид сбоя: UITransitionView: 0x1701fa700; Frame = (-2,84217e-14 0; 320 568); transform = [0, -1, 1, 0, 0, 0];

Одна вещь, которую я не понимаю, это то, почему "рамка" в сообщении об ошибке показывает 320 как ширину и 568 как высоту, когда "presentViewController" передает viewController с кадром, установленным в ландшафтном режиме (ширина =568, высота =320), Сообщение об ошибке также жалуется на "пересечение трансформаций вращательных границ", какие намеки на то, что представление viewController вращается?

Есть идеи, что не так?

Спасибо

1 ответ

После проб и ошибок я обнаружил, что установка "setTranslatesAutoresizingMaskIntoConstraints" на NO вызывает проблему. Я использовал его в viewDidLoad представленного ViewController:

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

Поэтому я удалил это утверждение. Я использовал это утверждение, чтобы убедиться, что у меня не будет конфликтов ограничений между создателями Интерфейсного интерфейса автоматическими ограничениями макета и автоматическими ограничениями макета, которые я добавил программно. Поэтому, когда я удалил оператор, я, конечно, получил конфликты ограничений, но я устранил их, "удалив" существующие ограничения в viewDidLoad для каждого подпредставления, для которого были конфликты ограничений. Кстати, мои программные ограничения называются в "updateViewConstraints"

Я не совсем понимаю, почему установка для setTranslatesAutoresizingMaskIntoConstraints значения NO приводила к проблеме невозможности представления нового viewController модально, но я предполагаю, что установка для setTranslatesAutoresizingMaskIntoConstraints значения YES каким-то образом необходима для автоматического определения ориентации и Размер представления viewController.

Другие вопросы по тегам