Ограничения автоматической компоновки в коде, конфликтующие с размерами в XIB


Я установил ряд UILabels и UIButtons в пределах 3 подвидов в раскадровке. В коде я определил ограничения автоматической компоновки для всех этих объектов, однако по какой-то причине при запуске приложения размеры, определенные в раскадровке, конфликтуют с ограничениями в коде.

Например, одно подвидо расположено в 0,0 в XIB с высотой 200 и шириной 320, просто для меня, чтобы разметить элементы перед написанием кода. В этом нет никаких ограничений. раскадровка.

Это подвидо имеет ряд UILabels и UIButtons внутри него, и их совокупная высота, как предполагается, определяет высоту подвида. Это должно закончиться на высоте 205pts, однако журнал показывает конфликт:

2014-06-02 16:45:38.506 discounter[11691: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) 
(
"<NSIBPrototypingLayoutConstraint:0x109390160 'IB auto generated at build time for view with fixed frame' V:[UIView:0x109389010(200)]>",
"<NSLayoutConstraint:0x109249510 V:[UIView:0x109389010(205)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x109249510 V:[UIView:0x109389010(205)]>
Я установил все свои взгляды, чтобы иметь translatesAutoresizingMaskIntoConstraints = NO так что я в недоумении, почему это происходит. Похоже, что это происходит и с рядом других элементов, но у меня есть ощущение, что это, вероятно, та же причина.

Может ли кто-нибудь помочь?

Спасибо!

1 3

1 ответ:

Добавьте те ограничения, которые вы замените в коде в раскадровке, и проверьте их свойства "удалить во время сборки". Вот так:

снять флажок во время сборки

Предыстория:

Это способ обещать Xcode, что вы добавите ограничение в код, и таким образом предотвратите автоматическое создание Xcode необходимых ограничений. Автогенерация необходима, так как в противном случае среда выполнения не сможет определить, как представить рассматриваемое представление. Как правило, вы должны стремиться определить все свои ограничения в раскадровке. Вы также можете добавить ограничение в код, а затем отредактировать его постоянное значение при запуске приложения, что позволит избежать утомительного добавления ограничений в код.