2015-02-12 2 views
0

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

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 для ширины и высоты.

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

неперехваченное исключение «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?

любая идея, что не так?

благодаря

+0

Действительно ли ваш 'PhotoViewController' настроен только для ориентации на ландшафт, или вы строго полагаетесь на установку фрейма, чтобы сделать это для вас (подсказка: это не так)? –

+0

В соответствии с Руководством по программированию ViewController, когда вы указываете на уровне приложения, что ваше приложение поддерживает определенные ориентации, этот выбор применяется ко всем viewControllers в приложении.В нем говорится: «Если вы ограничиваете поддерживаемые ориентации приложения, то эти ограничения применяются глобально ко всем контроллерам представлений приложения», но я также включил «supportedInterfaceOrientations» в PhotoViewController, чтобы указать, что он поддерживает пейзаж справа и слева, но ошибка все тот же – malena

+0

Вы пробовали явно не устанавливать фрейм и позволить системе сделать это за вас? –

ответ

0

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

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO]; 

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

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