Ограничения не работают как обычные присваивания в языках программирования.Таким образом, присвоение одного атрибута одному элементу не означает переопределение его каждый раз.Думайте об ограничениях как о системе уравнений, потому что на самом деле они являются системой уравнений.Когда Autolayout пытается вычислить размеры видов, он просто решает эту систему уравнений на основе ваших ограничений.Вот почему иногда вы видите предупреждения неоднозначности ограничений внутри раскадровок, потому что в ваших ограничениях недостаточно информации для успешного решения системы и поиска значений для всех переменных.
Так что в вашем случае система будет выглядеть так
a = b
a = c
a + b + c = 300
Вы можете легко рассчитать, что a
, b
и c
имеют значение 100
.Все они width
кнопок в вашем случае.И вы видите, что вы присваиваете a
дважды, но это не присваивание, как в языках программирования, а знак равенства, как в алгебре.Итак, поэтому нормально иметь несколько ограничений для одного параметра просмотра, но они должны быть разрешимыми.
Если у вас есть ограничения, одно из которых говорит, что ширина должна быть 100pt
, а другое - что >200pt
есть конфликт.И вам нужно решить это самостоятельно.
Вы можете прочитать больше здесь, в Apple docs .