У меня этот TabBarController в моем приложении, к которому я добавил UIView на самой верхней части TabBar. Я сделал это, потому что в этом представлении отображаются постоянные данные, которые я хотел отображать во всех представлениях. Я инициализировал это с помощью initWithFrame:
, и это именно то, где я хотел.iOS программно добавляет ограничения, приводящие к ошибке
Сегодня я заметил, что когда строка состояния увеличивается по высоте (во время разговора или в личной точке доступа), это представление перемещается в нижнюю часть. Я попытался исправить это, добавив ограничение:
[[self view] addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[_myView]-(44)-|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(_myView)]];
Таким образом, я бы ожидать, что MyView всегда будет находиться на расстоянии 44 очков от нижней части экрана, однако этого не происходит.
отладчик показывает:
Невозможно одновременно удовлетворяют ограничениям.
Возможно, по крайней мере одно из ограничений в следующем списке - это тот, который вы не хотите. Попробуйте это: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код, который добавил нежелательные ограничения или ограничения и исправить его. (Примечание: Если вы видите
NSAutoresizingMaskLayoutConstraints
, что вы не понимаете, обратитесь к документации поUIView
собственностиtranslatesAutoresizingMaskIntoConstraints
)( "< NSLayoutConstraint:0x165c0280 V:[UIView:0x165bda30]-(44)-| (Names: '|':UIView:0x166dd460)>", "< NSAutoresizingMaskLayoutConstraint:0x165a7ce0 h=--& v=--& UIView:0x165bda30.midY == + 507>", "< NSAutoresizingMaskLayoutConstraint:0x165c50c0 h=--& v=--& V:[UIView:0x165bda30(34)]>", "< NSAutoresizingMaskLayoutConstraint:0x165c3a90 h=-&- v=-&- UIView:0x166dd460.height == UIWindow:0x1668f870.height - 20>", "< NSAutoresizingMaskLayoutConstraint:0x165a8070 h=--- v=--- V:[UIWindow:0x1668f870(568)]>" )
будет пытаться восстановить разбив Constraint
< NSLayoutConstraint:0x165c0280 V:[UIView:0x165bda30]-(44)-| (Names: '|':UIView:0x166dd460)>
Перерыв на objc_exception_throw поймать это в отладчике. Методы в категории UIConstraintBasedLayoutDebugging в списке UIView, также могут быть полезны.
Эта ошибка отображается только при расширении строки состояния. Других ограничений, добавленных программно, нет, а VC Interface Builder для этого класса пуст. Все добавляется программно.
Это сводит меня с ума!
Я сделал это, но вид тогда вообще не показывался. Но когда вы сказали «только явные ограничения», я понял, что тогда мне также нужно будет указать высоту, ширину и начало координат. Теперь он работает как ожидалось! Благодарю. – Guilherme