Смущен конфликтующими ограничениями автопоставки
Я получил этот аварийный журнал, когда я нажимаю на tabitem панели вкладок, чтобы изменить viewcontroller:
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)
(
"<NSAutoresizingMaskLayoutConstraint:0xdb98e30 h=--- v=--- H:[UIWindow:0xc65c530(320)]>",
"<NSAutoresizingMaskLayoutConstraint:0xdbba9a0 h=-&- v=-&- UITransitionView:0xdb43ab0.width == UILayoutContainerView:0xdb42ef0.width>",
"<NSAutoresizingMaskLayoutConstraint:0xc680b80 h=-&- v=-&- UILayoutContainerView:0xdb42ef0.width == UIWindow:0xc65c530.width>",
"<NSAutoresizingMaskLayoutConstraint:0x119352f0 h=-&- v=-&- UIViewControllerWrapperView:0xc68a2c0.width == UITransitionView:0xdb43ab0.width>"
)
Will attempt to recover by breaking constraint
<NSAutoresizingMaskLayoutConstraint:0x119352f0 h=-&- v=-&- UIViewControllerWrapperView:0xc68a2c0.width == UITransitionView:0xdb43ab0.width>
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.
1 ответ
Во-первых, как вы применяете эти ограничения? Наиболее распространенной причиной этих сообщений о конфликтах является добавление ограничений, не гарантируя, что они являются единственными, которые имеет представление. Вы установили свойство
translatesAutoresizingMaskIntoConstraints = NO
прежде чем пытаться установить больше? Поскольку вы получаете это исключение во время выполнения, похоже, что XCode принял то, что вы пытаетесь сделать, поэтому вы, вероятно, добавляете ограничения в код.
Вы добавили в список все те ограничения, которые указаны как конфликтующие? Если так, удалите их и замените их один за другим, чтобы найти, какой из них вы ошиблись.
Если вы делаете все это в XCode в том, что мы привыкли называть Интерфейсным Разработчиком, используйте новые инструменты, чтобы изучить все ограничения и убедиться, что вы не добавили ограничения, которые конфликтуют. XCode может помочь вам здесь.
Если вы добавляете ограничения в код, но создали представление в IB, то вы, вероятно, захотите либо управлять всеми ограничениями в IB, либо вы хотите установить в xib НЕ использовать автопоставку, чтобы он не применял ограничения, конфликтующие с тем, что вы позже добавлю.