0

Я пытаюсь изменить положение UIViews при изменении ориентации iPhone. Когда iPhone находится в портретном режиме, я хочу, чтобы container view был один поверх tableView. В ландшафтном режиме они должны быть бок о бок (Container view: слева; tableView: справа). Я хочу сделать это, используя auto-layout.Ошибка при использовании автоматической компоновки, но хорошо выглядит в симуляторе

Вот образ того, как я поставил его: (Изображение взято в:. Ш любой час договора)

enter image description here

В тренажере, все работает, как ожидалось. Но когда ориентация айфонов меняется, я получаю следующее сообщение об ошибке:

Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7f83f254b7d0 V:[UIView:0x7f83f2564230(272)]>", 
    "<NSLayoutConstraint:0x7f83f251d9f0 V:[_UILayoutGuide:0x7f83f250c270]-(0)-[UIView:0x7f83f2564230]>", 
    "<NSLayoutConstraint:0x7f83f244bd00 UITableView:0x7f83f28c8e00.bottom == _UILayoutGuide:0x7f83f252f700.top>", 
    "<NSLayoutConstraint:0x7f83f244bd50 V:[UIView:0x7f83f2564230]-(0)-[UITableView:0x7f83f28c8e00]>", 
    "<_UILayoutSupportConstraint:0x7f83f254b880 V:[_UILayoutGuide:0x7f83f250c270(64)]>", 
    "<_UILayoutSupportConstraint:0x7f83f24e4aa0 V:|-(0)-[_UILayoutGuide:0x7f83f250c270] (Names: '|':UIView:0x7f83f2567df0)>", 
    "<_UILayoutSupportConstraint:0x7f83f251d8e0 V:[_UILayoutGuide:0x7f83f252f700(49)]>", 
    "<_UILayoutSupportConstraint:0x7f83f2564300 _UILayoutGuide:0x7f83f252f700.bottom == UIView:0x7f83f2567df0.bottom>", 
    "<NSLayoutConstraint:0x7f83f257dec0 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f83f2567df0(375)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f83f254b7d0 V:[UIView:0x7f83f2564230(272)]> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

ошибка, вероятно, на самом деле просто, но я не понимаю. (Опять же, все выглядит нормально и нормально в симуляторе.)

ответ

4

Image is taken in: w Any h Compact

Но проблема в том, что при переключении на другую ориентацию, вы не в ш: Любой час: Compact. Поэтому в тот момент некоторые из затуманенных ограничений оживают! Это условные ограничения, основанные на классе размера, т.е. ориентации.

Итак, вы видите, что скрытое ограничение в верхней части экрана, задав высоту контейнера до 272? Это проблема! Когда вы поворачиваете ориентацию, это ограничение оживает и вызывает конфликт. Итак, переключитесь на любой класс размера, где это ограничение высоты контейнера не неаккуратно, и подумайте о , что набор ограничений.

+0

Спасибо за ответ! Почему это должно возникать проблемы, если оно исчезает, когда в 'w Any h Compact'? Кроме того, мне нужно, чтобы высота просмотров контейнера составляла 272 в этом представлении. Что я могу сделать, чтобы исправить это? – Jessica

+0

Он создает проблемы только тогда, когда он появляется _. Когда это произойдет, это будет так же, как сказал вам Уилл: ваши ограничения переопределены и не могут быть удовлетворены одновременно. Как он предположил, у вас, вероятно, есть верхнее ограничение и нижние ограничения _and_ ограничение по высоте, и это неправильно. – matt

2

Ошибка просто означает, что у вас слишком много ограничений, а некоторые из них сталкиваются (невозможно выполнить). Система автоматически игнорировала одно из сталкивающихся ограничений (в частности, ограничение, согласно которому UIView был высотой 272). Несмотря на то, что он отлично подходит для вас, вы должны стремиться его исправить.

Проблема в том, что у вас есть ограничения по расстоянию, которые охватывают всю высоту экрана, поэтому все ограничено сверху вниз, но тогда у вас также есть ограничения, определяющие высоту, а конкретные числа делают невозможным оба из которых должны быть выполнены.

+0

Красиво объяснено. – matt

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