Подтвердить что ты не робот

Где установлен флажок Xcode "Переводит Autoresizing Mask Into Constraints"

В одном из видеороликов WWDC 2012, Auto Layout By Example, они демонстрируют приложение OS X с использованием Autolayout, и примерно через 7-8 минут он показывает, как для одного представления вы можете снять флажок в атрибутах Инспектор, и поле называется чем-то вроде "Переводит авторезистирующую маску в ограничения" . Теперь я хорошо знаю код, эквивалентный этому полю, translatesAutoresizingMaskIntoConstraints boolean, но я не могу найти этот флажок где-либо в проектах iOS или OS X. Мой проект использует Autolayout. Мне действительно нужен этот флажок, потому что одна из вещей, с которыми я борюсь в обучении Autolayout (и преобразовании springs/struts app в AL), - это миллионы ограничений, которые Xcode генерировал для каждого представления, и как их очищать и разумно переопределять некоторые/все в коде. Что бы я хотел, чтобы сделать это преобразование по одному виду за раз, нужно отключить эти автоматически сгенерированные ограничения.

Почему я не вижу этот флажок? Я использую Xcode 4.6.

4b9b3361

Ответ 1

Этот флажок доступен в Interface Builder (IB), но только если вы разрабатываете проекты Cocoa, предназначенные для OS X. Для iOS он недоступен в настоящее время. Вы можете установить его только программным способом.

Автоматическая компоновка на iOS из моего понимания - и другие могут свободно размещаться здесь - это не полная реализация того, что доступно на OS X.

Если честно, учитывая то, что вы говорите впоследствии, этот флажок, вероятно, вам не нужно беспокоиться. Я думаю, что важно обновить проекты OS X до Auto Layout, но, как правило, для iOS вряд ли вы будете смешивать один и другой. I.e., вы либо установите флажок Xib в Инспекторе файлов, чтобы "Использовать автоспуск", либо нет.

enter image description here

Тем не менее, есть один случай использования, где вам может понадобиться связать этот флаг. Это, если вы хотите создать автономный Xib файл для представления, а затем загрузите его программным способом с помощью loadNibNamed. При этом, по умолчанию старые параметры автоматического изменения размера преобразуются в новые ограничения Auto Layout стиля. Обычно я хочу добавить свой собственный, поэтому я установил этот флаг, чтобы отключить его.

myView.translatesAutoresizingMaskIntoConstraints = NO

В любом случае эта другая история.

Здесь ссылка для получения дополнительной информации, хотя вы, без сомнения, уже посмотрели на нее:

Принятие автоматической компоновки

Одна вещь, которую я бы сказал, это то, что если вы начинаете бороться с Auto Layout в начале - и вы не были бы людьми, если бы вас не было, мы все были - тогда я бы придерживался Interface Builder и подумайте о золотых правилах. Самый важный для меня - то, что он ненавидит двусмысленность. Это как вакуум в природе. Прежде чем вы сможете удалить ограничение, которое вам не нужно, вы должны добавить тот, который вы хотите, а затем замените старый.

Другая ошибка, которую я произнесла, - это сочетание автоматического макета и фреймов. Поэтому я бы сделал код, который проверил ширину кадра, а затем применил бы это к ограничениям. Плохая ошибка. Это действительно заканчивается слезами. Когда вы попадаете в Auto Layout, вам действительно нужно забыть о том, чтобы делать что-либо с помощью CGRect, frame и т.д.

Придерживайтесь этого. Начните с некоторых простых представлений в IB и экспериментируйте. На самом деле существует метод безумия.

Еще одна ссылка, заслуживающая внимания:

10 вещей, которые вам нужно знать о Cocoa Autolayout