Ниже приведено сообщение об ошибке, которое я получаю в области отладки. Он работает нормально и ничего плохого, кроме того, что я получаю эту ошибку. Это помешало бы Apple принять приложение? Как мне это исправить?
2012-07-26 01:58:18.621 Rolo[33597:11303] 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:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
"<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
"<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
"<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
"<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
"<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
"<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
"<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
"<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
"<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>
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.
ios
objective-c
debugging
nslayoutconstraint
Джонни Кокс
источник
источник
Ответы:
Я бы порекомендовал отладить и найти, какое ограничение является «тем, которое вам не нужно» . Предположим, у вас есть следующая проблема:
Всегда проблема в том, как найти следующие ограничения и представления.
Есть два решения, как это сделать:
Поскольку вы знаете, где найти неожиданные ограничения (PBOUserWorkDayHeaderView), есть способ сделать это довольно хорошо. Найдем
UIView
иNSLayoutConstraint
в красных прямоугольниках. Так как мы знаем их идентификатор в памяти, это довольно легко.Как видите, указатели памяти одинаковы. Итак, мы знаем, что происходит сейчас. Дополнительно вы можете найти
NSLayoutConstraint
в иерархии представления. Так как он выбран в представлении, он также выбран в навигаторе.Если вам нужно, вы можете также распечатать его на консоли, используя адресный указатель:
Вы можете сделать то же самое для каждого ограничения, на которое вам указывает отладчик :-) Теперь вы решаете, что делать с этим.
Напечатайте это лучше (я действительно рекомендую этот способ, это из Xcode 7)
NSLayoutConstraint
:SWIFT :
Objective-C
id
вы можете просто нажать на него в вашем Find Navigator :КАК ПРОСТО ЧТОБЫ ИСПРАВИТЬ?
999
для разбитого ограничения.источник
Проблема, с которой вы столкнулись, заключается в том, что NSAutoresizingMaskLayoutConstraints не должно быть там. Это старая система пружин и распорок. Чтобы избавиться от этого, запустите этот метод для каждого представления, которое вы хотите ограничить:
источник
Будьте осторожны , чтобы не использовать более одного ограничения в одном направлении и типе.
Например: вертикальное ограничение для трейлинга = 15, а другое -> = 10.
Иногда Xcode создает некоторые ограничения, которые вы не замечаете . Вы должны избавиться от лишних ограничений, и предупреждение журнала обязательно исчезнет.
Кроме того, вы можете прочитать и обнаружить некоторые определенные причины прямо из журнала :
Это мы можем считать проблемой в ограничении UILabel, это ведущее вертикальное ограничение длиной 15pt.
Это будет горизонтальное ограничение и т. Д.
источник
Я выбросил довольно много этих исключений, и самый быстрый и простой способ найти их - найти уникальные значения в исключениях, которые я затем искал в исходном коде раскадровки. Это помогло мне найти фактические представления и ограничения, вызывающие проблему (я использую значимые метки userLabels для всех представлений, что значительно облегчает отслеживание ограничений и представлений) ...
Таким образом, используя вышеупомянутые исключения, я бы открывал раскадровку как «исходный код» в xcode (или другом редакторе) и искал что-то, что я могу найти ...
.. это выглядит как вертикальное (V) ограничение для UILabel со значением (17).
Просматривая исключения, я также нахожу
Похоже, что UILabel (0x72bf7c0) близка к кнопке UIB (0x886efe0) с некоторым вертикальным интервалом (8) ..
Надеюсь, этого будет достаточно для того, чтобы найти конкретные представления в исходном коде раскадровки (возможно, путем поиска в тексте слова «17») или хотя бы несколько вероятных кандидатов. Оттуда я должен быть в состоянии выяснить, какие представления находятся в раскадровке, что значительно облегчит выявление проблемы (ищите «дублированный» пиннинг или пиннинг, который конфликтует с ограничениями размера).
источник
Мне было трудно понять, какие ограничения были причиной этой ошибки. Вот более простой способ сделать это.
Я использую Xcode 6.1.1
источник
У меня была эта проблема, потому что мои
.xib
файлы использовали autolayout.В инспекторе файлов первая вкладка. Снятие отметки «Использовать Autolayout» решило проблему.
источник
UIImageView
изменилась. Вы должны установить эту позицию снова, либо программно, либо через Interface Builder.Вот мой опыт и решение. Я не трогал код
источник
используйте swift этот код
источник
Я следовал ТАК вопросы и ответы от каждого поискового запроса. Но все они связаны с конкретным.
В основном, я имею в виду, прежде чем вы собираетесь записать формат (может быть простой), он будет предупреждать вас.
С iOS 8.0 по умолчанию представления являются классами размеров. Даже если вы отключите классы размера, он все равно будет содержать некоторые ограничения автоматического размещения.
Так что, если вы планируете устанавливать ограничения через код, используя VFL. Тогда вы должны позаботиться о одной ниже линии.
Я много искал в SO, но решение было в Apple Sample Code .
Таким образом, вы должны удалить ограничения по умолчанию, прежде чем планировать добавлять новые.
источник
Для меня главной причиной этой проблемы было то, что я забыл снять флажок
AutoLayout
вXib
редакторе. На самом деле, я сделал много измененийXIB
в коде.источник
Это помогло мне поймать вид, вызывающий проблему.
источник
Ни один из предыдущих ответов не поможет в моей ситуации. Я использую XCode 10.1 и тестирую свое приложение на симуляторе для «iPad (5-го поколения)». Симулятор работает под управлением iOS 12.1.
У меня есть простое корневое представление в моей раскадровке с двумя подпредставлениями UITextField. В раскадровке нет никаких ограничений. И у меня нет объектов UIButtonBarView в приложении или раскадровке.
Никакие сообщения не будут напечатаны, когда приложение запустится и выложит корневой вид. Нет, когда моделируемое устройство вращается.
Но в симуляторе, в тот момент, когда я нажимаю на одно из текстовых полей, расширение клавиатуры появляется в нижней части экрана, но не на полной клавиатуре, которая никогда не появляется в симуляторе. Но на терминале распечатывается следующее:
Мне, конечно, кажется, что все это не имеет ничего общего с моим приложением, и все, что связано с тем, как Apple создает свой собственный вид клавиатуры, даже с моим небольшим расширением, объявленным как объединенное с ним.
Таким образом, остается вопрос, есть ли что-то, за что я, как разработчик приложения, отвечаю (по предположению, это куча вещей, на которые стоит обратить внимание), или это просто собственная проблема / ошибка Apple?
Кстати, это сообщение о проблеме ограничения не появляется при моделировании более новой модели iPad, такой как iPad Pro 12,9 дюйма (3-го поколения). Но сообщение появляется при моделировании iPad Pro 9,7 ". Все утверждают, что работают под управлением iOS 12.1.
источник
Я получаю ту же ошибку, но только в определенном представлении, когда я касаюсь первого текстового поля, а затем следующего текстового поля вниз.
Я пишу в SwiftUI для iOS 13.4
источник
Я также столкнулся с той же проблемой нарушения ограничений в журнале для viewCircle в xib. Я почти перепробовал все перечисленное выше, и у меня ничего не получалось. Затем я попытался изменить приоритет ограничения высоты, которое нарушалось в журнале (подтверждается добавлением идентификаторов для ограничений на xib), введите описание изображения здесь
источник
Одна вещь, на которую нужно обратить внимание (по крайней мере, это сбило меня с толку), заключалась в том, что я убирала ограничение из неправильного представления. Ограничение, которое я пытался удалить, не было дочерним ограничением моего взгляда, поэтому, когда я это сделал
это на самом деле ничего не удаляло, потому что мне нужно было позвонить
так как ограничение было технически родственным ограничением моего взгляда.
источник
Свифт 4
Я просто добавляю эту строку в viewDidLoad и отлично работаю со мной.
источник