Принятие автоматического расположения
Представления, знающие об Автоматическом Расположении, могут сосуществовать в окне с представлениями, которые не являются. Т.е. существующий проект может инкрементно принять Автоматическое Расположение — Вы не должны заставлять его работать в Вашем целом приложении одновременно. Вместо этого можно перейти приложение для использования Автоматического Расположения одно представление во время с помощью свойства translatesAutoresizingMaskIntoConstraints
.
Когда это свойство YES
, который это по умолчанию, маска автоизменения размеров представления переводится в ограничения. Например, если представление сконфигурировано как то ниже, и translatesAutoresizingMaskIntoConstraints
YES
, тогда ограничения |-20-[button]-20-|
и V:|-20-[button(20)]
добавляются к суперпредставлению представления. Результирующий эффект состоит в том, что не сознающие представления ведут себя, как они сделали в версиях OS X до версии 10.7.
Если Вы перемещаете кнопку 15
точки налево (включая путем вызова setFrame:
во время выполнения), новые ограничения были бы |-5-[button]-35-|
и V:|-20-[button(20)]
.
Для представлений, знающих об Автоматическом Расположении при большинстве обстоятельств, которые Вы хотите translatesAutoresizingMaskIntoConstraints
быть NO
. Причина состоит в том, что ограничения, сгенерированные путем перевода маски автоизменения размеров, уже достаточны для завершенного указания кадра мнения, высказанного кадр его суперпредставления, который является обычно слишком много. Например, когда ее заголовок изменяется, этот перевод предотвратил бы кнопку от автоматического принятия ее оптимальной ширины.
Основное обстоятельство, при котором Вы не должны вызывать setTranslatesAutoresizingMaskIntoConstraints:
когда Вы не лицо, указывающее отношение представления к его контейнеру. Например, NSTableRowView
экземпляр помещается NSTableView
. Это могло бы сделать это, позволив маске автоизменения размеров быть переведенным в ограничения, или это не могло бы. Это - частная подробность реализации. Другие представления, на которых Вы не должны вызывать setTranslatesAutoresizingMaskIntoConstraints:
включайте NSTableCellView
объект, подпредставление NSSplitView
, представление NSTabViewItem
, или представление содержания NSPopover
, NSWindow
, или NSBox
объект. Для знакомых с классическим расположением Какао: Если Вы не вызвали бы setAutoresizingMask:
на представлении в классическом стиле Вы не должны вызывать setTranslatesAutoresizingMaskIntoConstraints:
при автоматическом расположении.
Если у Вас есть представление, делающее его собственное расположение путем вызова setFrame:
, Ваш существующий код должен работать. Просто не вызывайте setTranslatesAutoresizingMaskIntoConstraints:
с параметром NO
на представлениях, что Вы помещаете вручную.