Masonry é um projeto open source que pretende tornar o código do Auto Layout mais legível e conciso.
O Masonry, "um framework de layout leve que encapsula o Auto Layout com uma sintaxe mais agradável", permitindo uma nova experiência no XIB ou Storyboard-free. Jonas Budelmann, criador do Masonry, argumenta que apesar do Auto Layout ser poderoso também pode se tornar verboso e ilegível.
O Masonry é uma linguagem específica de domínio (Domain Specific Language - DSL) que oferece todas as capacidades do Auto Layout com a conveniência de métodos para fazer e atualizar restrições, acessando os atributos, definindo prioridades e suporte a depuração.
O exemplo de código a seguir está disponível no GitHub e apresenta um uso normal e sucinto da sintaxe do Masonry:
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10); [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview).with.insets(padding); }];
O principal do Auto Layout é a restrição: uma representação matemática do relacionamento entre elementos de interface gráfica (UI). As restrições compreendem tamanho, gerenciamento de posicionamento relativo por prioridade e limiares. As restrições adicionadas podem causar possíveis conflitos de restrições e tratamento insuficiente das restrições trazendo ambiguidade, sendo que ambos cenários podem ocasionar lançamento de exceções.
A criação pragmática das restrições sem o uso do Masunry é possível através da criação de um NSLayoutConstraint com referência para a visão e especificando atributos e relacionamentos. A Apple fornece o Visual Format Language; outra DSL para descrever os relacionamentos no formato texto.
O Auto Layout não é obrigatório nem exclusivo com o "springs e struts" para realizar uma abordagem válida. Os "springs e struts", ou máscaras de auto redimensionamento, determinam como uma view responde quando seu componente pai muda suas dimensões.
A Apple fornece algumas razões para adotar o Auto Layout:
- "Springs e struts" necessitam que o código suporte múltiplas orientações, diferentes tamanhos de telas e conteúdo dinâmico;
- O Dynamic Types dos iOS 7 permite que os usuários especifiquem um tamanho de texto preferido nas aplicações;
- O suporte das versões iOS 6 e 7; e seus diferentes elementos de métricas.
O Auto Layout não é nada sem os problemas fundamentais. A Apple fornece um guia de como usar o Auto Layout com o UIScrollView. Matt Neuburg fornece um argumento convincente do porque o "Auto Layout não funciona totalmente nas transformações das views" sugerindo um grande uso das camadas de transformações para compensar.
Qualquer tipo de código de Auto Layout significa que não haverá os ganhos fornecidos pelas melhorias disponíveis no Interface Builder do Xcode 5. Principalmente a habilidade para resolver visualmente os problemas do Auto Layout e pré visualizar o código no assistente de edição que deixa visualizar como o layout ficará em tempo de execução em diferentes orientações, diferentes versões do iOS e diferentes tamanhos de dispositivos.