Masonry Как сделать AutoLayout в iOS приятным
Репозиторий давно не обновлялся
Последнее обновление было 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, которая:
- Автоматически устанавливает
translatesAutoresizingMaskIntoConstraints = NO - Сама добавляет constraints к appropriate view
- Поддерживает все возможности AutoLayout
Установка
Добавьте в Podfile:
pod 'Masonry'
Для более краткого синтаксиса определите перед импортом:
#define MAS_SHORTHAND
Masonry — must-have для Objective-C разработчиков, работающих с AutoLayout. Хотя для Swift проектов авторы рекомендуют SnapKit (тот же подход, но с учетом особенностей Swift), Masonry остается отличным выбором для:
- Поддержки legacy-проектов
- Разработчиков, предпочитающих Objective-C
- Ситуаций, где нужен проверенный временем инструмент
Попробуйте Masonry в своем следующем проекте — и вы больше не захотите возвращаться к «голому» AutoLayout API.
