0

Я получаю очень странное поведение от одного из моих контроллеров.Ошибки NSLayoutConstraint только при переключении контроллеров просмотра

Я перехожу к одному и тому же контроллеру (с разными экземплярами) от двух разных UITableViews на разных вкладках.

Когда он отображается из-под крана на UITableViewCell, все в порядке и никаких ошибок не отображается. Если у меня есть открытый контроллер, и я уйду от него, выбрав другую вкладку, а затем перейдя к ней, нажав вкладку оригинала, я получаю большое количество ошибок NSLayoutConstraint.

У меня нет никаких ограничений в моей ячейке, и у меня нет элементов интерфейса в представлении содержимого ячейки в раскадровке, так как я добавляю их все программно. Я также не определяю никаких ограничений в коде.

Полная ошибка here, так как она слишком велика, чтобы разумно вставить ее в SO.

Выдержка выглядит следующим образом:

2015-04-11 16:49:23.889 TradingPost[6982:60b] 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:0x155e5250 H:[UILabel:0x155d8150(158)]>", 
"<NSLayoutConstraint:0x155ed9e0 H:|-(8)-[UILabel:0x155d8150] (Names: '|':UITableViewCellContentView:0x155d4a80)>", 
"<NSLayoutConstraint:0x155eda30 H:[UILabel:0x155d8150]-(47)-[UIView:0x155e01a0]>", 
"<NSLayoutConstraint:0x155f1bc0 UIView:0x155e01a0.trailing == UITableViewCellContentView:0x155d4a80.trailing - 8>", 
"<NSAutoresizingMaskLayoutConstraint:0x156b7640 h=--& v=--& H:[UITableViewCellContentView:0x155d4a80(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x155e5250 H:[UILabel:0x155d8150(158)]> 

Break on objc_exception_throw to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

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

+0

Вы проверили/задали значение 'translatesAutoresizingMaskIntoConstraints' из рассматриваемых видов? – Dennis

ответ

2

Даже если вы не создаете никаких ограничений явно, система автоматического макета может создать их из маски autoresizingMask, связанной с каждым представлением. Вы можете попробовать установить translatesAutoresizingMaskIntoConstraints на номер NO. Однако, если вы используете классы автоматического макета и размера для создания интерфейса, который адаптируется к разным размерам экрана, вам, вероятно, придется охватить ограничения. В этом случае вам может быть лучше отключить соответствующие ограничения в вашем коде.

+0

В первый раз, когда я переключаюсь на представление после установки 'translatesAutoresizingMaskIntoConstraints 'элемента' NO', нет ошибки. Но каждый раз после этого (в том числе, когда я закрываю и снова открываю приложение), я получаю ошибки. – JamEngulfer

+0

После более подробного расследования, я совершенно не понимаю, что вызывает ошибки. Даже когда я удаляю весь код пользовательского интерфейса с контроллера, ошибки все еще появляются. – JamEngulfer

0

Я обнаружил, что другой взгляд, связанный с тем, который, как я думал, вызывает проблему, явился причиной этой проблемы.

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

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