Ландшафтное приложение 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.