Как стать автором
Обновить

Математические основы Auto Layout

Время на прочтение 17 мин
Количество просмотров 29K
Всего голосов 39: ↑38 и ↓1 +37
Комментарии 9

Комментарии 9

Было бы интересно сравнить с тем, как верстает TeX.

Спасибо за статью, очень интересно.

Хотел бы добавить, что изменение приоритета ограничения(constraint) с optional (<1000) на required (=1000) или наоборот с required на optional, приведет к ошибке в райнтейме. Интересно было бы узнать, почему Auto Layout так себя ведет, что ему мешает сделать просто перерасчет.
Стоит отметить, что далеко не все получится описать линейными уравнениями и, равносильно, ограничениями. Самый удобный layout который я видел это тупейший anchor layout в древнем Delphi образца 1998 года. Далеко с ним не уедешь, зато знаешь чего ждать и когда пора писать код руками. С сложными системами верста постоянно себя чувствую программистом на XML, когда ясную задачу прописываешь на максимально неподходящем для неё языке. В конце концов запили построитель прямоугольников и пишу все в коде, без линейной алгебры и сюрпризов.

Как раз таки Autolayout в чистом виде очень предсказуемо себя ведет. Проблемы у новичков возникают, когда нужно взаимодействие легаси компонентов с ним, например UITextView в self-size ячейке, который должен растягиваться под размер введённого текста.

Не могу согласиться, даже в чистом виде сложный layout быстро теряет предсказуемость и это свойство всех layout систем. Короче я ниасилил, сдался и сделал свой велосипед :) Последней каплей для меня стало прочтение мануала о том, как делать layout внутри scroll view.
То есть вместо простого, надёжного и предсказуемого flex-layout они накрутили гору матана, который работает на порядки медленнее, а конфигурировать и дебажить который на порядки сложнее.
Ой, да ладно! «Линейка» — это ни разу не матан.
вместо простого, надёжного и предсказуемого flex-layout

Если я правильно понял, о чем вы, то все (или почти все), что умеет flex-layout — умеет один единственный UIStackView и предоставляет очень похожие способы управления этим всем. Точно так-же "просто, надежно и предсказуемо". Autolayout же в общем случае предоставляет намного больше гибкости и возможностей. И не сказал бы, что он сильно сложен в использовании или "непредсказуем".
Медленнее работает и дебажить иногда сложнее — это да. Но проблемы с производительностью, как правило, бывают только в сильно сложных UITableView/UICollectionView с автосайзингом ячеек и прочими радостями. А дебаг с визуальным инспектором сейчас в некоторых случаях даже проще, чем ползание по коду в поисках, кто же там фрейм портит.

flex ещё во wrap умеет. Так какой макет позволяет сверстать Autolayout, который не сможет flex?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий