Masonry Как сделать AutoLayout в iOS приятным

21 июл 2025

Репозиторий давно не обновлялся

Последнее обновление было 3 года назад.

18,131
3,148
700
3 года

Помните эти бесконечные строки кода с NSLayoutConstraint, где легко запутаться в атрибутах и множителях? Masonry — это глоток свежего воздуха для iOS-разработчиков, уставших от вербозности нативного AutoLayout.

Почему Masonry?

AutoLayout — мощный инструмент, но его API на Objective-C выглядит как пережиток прошлого. Для простого расположения view с отступами в 10 пикселей приходится писать целый роман:

[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:10]

Masonry заменяет это цепочкой простых и понятных выражений:

[view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview).with.insets(UIEdgeInsetsMake(10, 10, 10, 10)); }];

Главные преимущества

1. Читаемый DSL

Masonry предлагает domain-specific language для описания ограничений:

make.top.equalTo(superview.mas_top).offset(10); make.width.greaterThanOrEqualTo(@200); make.center.equalTo(anotherView);

2. Композитные ограничения

Создавайте несколько ограничений одной строкой:

Реклама
// Все стороны view совпадают с superview make.edges.equalTo(superview); // Центрирование с offset make.center.equalTo(superview).centerOffset(CGPointMake(-5, 10));

3. Гибкое обновление

Masonry предоставляет три подхода для работы с изменяющимися ограничениями:

  • mas_makeConstraints — первоначальная установка
  • mas_updateConstraints — изменение значений констант
  • mas_remakeConstraints — полный пересмотр ограничений

4. Удобный дебаг

При конфликтах ограничений Masonry выводит понятные сообщения, где легко идентифицировать проблемные view.

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

Masonry особенно полезен в сценариях:

  • Динамических интерфейсах с изменяющейся структурой
  • Анимации изменений layout'а
  • Сложных адаптивных интерфейсах
  • Прототипировании UI

Под капотом

Masonry — это обертка над NSLayoutConstraint, которая:

  1. Автоматически устанавливает translatesAutoresizingMaskIntoConstraints = NO
  2. Сама добавляет constraints к appropriate view
  3. Поддерживает все возможности AutoLayout

Установка

Добавьте в Podfile:

pod 'Masonry'

Для более краткого синтаксиса определите перед импортом:

#define MAS_SHORTHAND

Masonry — must-have для Objective-C разработчиков, работающих с AutoLayout. Хотя для Swift проектов авторы рекомендуют SnapKit (тот же подход, но с учетом особенностей Swift), Masonry остается отличным выбором для:

  • Поддержки legacy-проектов
  • Разработчиков, предпочитающих Objective-C
  • Ситуаций, где нужен проверенный временем инструмент

Попробуйте Masonry в своем следующем проекте — и вы больше не захотите возвращаться к «голому» AutoLayout API.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.