Каков наилучший способ устранить ошибку «Невозможно одновременно удовлетворить ограничения»? - PullRequest
0 голосов
/ 22 марта 2020

Я полагаю, что в большинстве проектов нет только одного или двух стековых представлений с ограничениями, поэтому .... Как я могу использовать информацию, представленную в этом отчете об ошибках, чтобы точно определить, какие ограничения в моем проекте проблемные c? В проекте с потенциально сотнями ограничений, как я могу узнать, какие 2 ограничения являются проблемными c в этом случае?

2020-03-22 14:31:59.690493-0400 Splittr[39203:4533416] [LayoutConstraints] 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. 
(
    "<NSLayoutConstraint:0x600001eff0c0 H:|-(4)-[UIStackView:0x7fa5ec678e30]   (active, names: '|':UIStackView:0x7fa5ec601960 )>",
    "<NSLayoutConstraint:0x600001ec8500 'UISV-canvas-connection' UIStackView:0x7fa5ec601960.leading == UIStackView:0x7fa5ec678e30.leading   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600001ec8500 'UISV-canvas-connection' UIStackView:0x7fa5ec601960.leading == UIStackView:0x7fa5ec678e30.leading   (active)>

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

1 Ответ

0 голосов
/ 22 марта 2020

В проекте с потенциально сотнями ограничений, как я могу узнать, какие 2 ограничения являются проблемными c в этом случае?

TIP ONE Look в отладчике представления. Ограничения с конфликтами обычно должны быть четко показаны восклицательными знаками.

TIP TWO Дайте все строки идентификаторов ограничений. Вы можете сделать это в раскадровке или (если вы создаете ограничения в коде) в коде. Таким образом, имя появляется в отчете о конфликтующих ограничениях, и вы мгновенно узнаете, какое ограничение есть какое.

(К сожалению, ограничения, созданные представлением стека, не будут иметь идентификаторов, и вы не сможете их добавить. Но вы будете по крайней мере, знайте, что они происходят из стека.)

СОВЕТ ТРИ Еще один очень хороший трюк - дать имена всем вашим представлениям. Например, вы могли бы дать вашим представлениям стека имена, а затем вы можете решить, какой из них какой. Я делаю это, присваивая строку представлению layer.name; большинство людей не знают, что layer имеет свойство name, которое просто сидит и ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...