Недавно я попытался научиться создавать приложения для iOS полностью программно. И из-за этого одним из первых препятствий, с которыми я столкнулся, является то, что для translatesAutoresizingMaskIntoConstraints обычно должно быть установлено значение false, чтобы установить ограничения.
Проведя некоторые исследования, я почти уверен в трех вещах.
Чего я не понимаю, так это того, как именно реализуются эти ограничения. Apple заявляет в своей документации, что «система создает набор ограничений, которые дублируют поведение, заданное маской автоматического изменения размера представления. Это также позволяет вам изменять размер и местоположение представления, используя свойства кадра, границ или центра представления ...»
Это часть, которая меня смущает, и я не уверен, что это просто их формулировка или мое непонимание темы. AutoresizingMask — это просто значение, поэтому не имеет смысла создавать на его основе ограничения. Означают ли они, что автоматически сгенерированные ограничения фактически основаны на фрейме дочернего представления (также известном как childView.topAnchor = superview.topAnchor
)? и что значение AutoresizingMask просто определяет, какое из этих ограничений на основе кадра устанавливается?
Например: UIView с рамкой (x: 0, y: 0, ширина: 50, высота: 50) и AutoresizingMask «FlexibleBottomMargin». UIKit просто автоматически создает ограничения, которые помещают вид туда, где был бы макет на основе фрейма, а затем пропускает определенные ограничения (в данном случае дно), чтобы воспроизвести поведение маски?
Вы правы в том, что autoresizingMask
интерпретируется (вместе с фреймом), чтобы определить, какие ограничения создавать.
В приведенном вами примере система создаст следующие ограничения:
Это привело бы к виду 50x50, который был зафиксирован по горизонтали и вверху, и где пространство между низом и его соседом может увеличиваться по мере необходимости.
Вы можете установить frame
, когда для него установлено значение false, но как только произойдет следующий проход автомакета, кадр будет сброшен в соответствии с ограничениями.
Привет, Пол. У меня есть дополнительный вопрос здесь... как указано в документах, если установлено значение true, это позволяет использовать изменение размера и местоположения представлений, но мы можем изменить местоположение, даже если для translatesAutoresizingMaskIntoConstraints установлено значение false