Auto Layout e StackView no iOS9: uma comparação com Android

Auto Layout e StackView no iOS9: uma comparação com Android
felipe.torres
felipe.torres

Compartilhe

Ao trabalhar com layouts no Android estamos acostumados com o desafio de criá-los de forma a se adaptar ao maior número possível de telas, pois dada a diversidade de dispositivos, criar um layout que só fica bom para uma única dimensão de tela pode causar problemas para outros usuários.

Esse desafio é tão comum que o próprio Android deu uma ajudinha criando valores para usarmos nas dimensões dos nossos elementos quando queremos um comportamento mais fluido: é o caso do match_parent e wrap_content.

Então, um layout bastante familiar que deixaria um campo de inserção de texto e um botão, ambos centralizados, ocupando a largura total da tela do aparelho seria assim:

Banner da Escola de Mobile: Matricula-se na escola de Mobile. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout\_width="match\_parent" android:layout\_height="match\_parent" android:orientation="vertical" android:gravity="center">

<EditText android:layout\_width="match\_parent" android:layout\_height="wrap\_content" android:layout\_marginBotton="30dp"/>

<Button android:layout\_width="match\_parent" android:layout\_height="wrap\_content" android:text="Botão" android:background="#FF800080" android:textColor="#FFFFFFFF"/> </LinearLayout> 

Já no mundo o iOS as coisas são um pouquinho diferentes. Como no início desse sistema operacional, não haviam iPhones com dimensões diferentes de tela, layouts não-fluidos faziam bastante sentido. No máximo tínhamos que nos preocupar com a aparência da nossa aplicação quando o aparelho estivesse na horizontal, mas ainda assim seriam apenas dois tipos de layouts diferentes.

As coisas começaram a se complicar em 2012 com o lançamento do iPhone 5, que era o primeiro iPhone a ter uma tela de 4 polegadas, enquanto todos os outros até então tinham 3.5 polegadas. Juntamente com essa meia polegada a mais na tela, veio uma preocupação: se quiséssemos nossa aplicação bonita nos iPhones 4 e 5 teríamos que fazer até quatro layouts diferentes, considerando os aparelhos nas orientações vertical e horizontal!

No entanto, juntamente com esse novo aparelho, na Apple World Wide Conference (WWDC) de 2012 o iOS 6 foi anunciado com uma funcionalidade bastante interessante que existe até hoje: o Auto Layout, uma forma bem legal de criarmos layouts que se adaptam aos diferentes tamanhos de dispositivos!

Hoje em dia o Auto Layout está bastante integrado ao Xcode, tornando seu uso bastante simples. Vamos fazer uma tela parecida com a definida no Android, contendo um campo de texto e um botão ocupando a largura total da tela:

Como estamos focados somente no layout, podemos criar uma aplicação qualquer contendo já uma telinha para manipularmos. No Xcode, vamos escolher Single View Application:

Single View Application

Na sequência, podemos colocar um nome para a app de TesteAutoLayout:

Nome para a app

Abrindo o arquivo Main.storyboard, podemos começar a construir nosso layout! Primeiramente, vamos arrastar os dois componentes que teremos, um Text Field e Button que estão no painel no canto inferior direito da IDE:

Painel de elementos

Com o Button selecionado, vamos selecionar o Attributes Inspector e colocar um background nele para visualizarmos suas dimensões:

Attributes Inspector Background

Ao final, teremos uma tela com essa cara no nosso storyboard:

Projeto sem Auto Layout

Porém, ao rodar essa tela num simulador qualquer (no meu caso, estou usando um simulador para o iPhone 6), olha como ela ficará:

Resultado sem Auto Layout

Além disso, as coisas ficam um pouco piores quando rotacionamos a tela. Apertando CMD + seta, temos esse layout:

Emulador rotacionado sem Auto Layout

Vamos usar o Auto Layout para que nossos componentes se adaptem a quaisquer dimensões de tela!

Para facilitar a centralização de múltiplas views em relação a um mesmo ponto, o iOS 9 possui uma funcionalidade chamada Stack View, que nos permite criar uma view que funcionará como container e manipular suas propriedades!

Vamos criar uma Stack View selecionando o Button e o Text Field e clicando em Editor -> Embed In -> Stack View

Com isso, nosso layout ficou completamente estranho:

Stack View

Com o Stack View selecionado, vamos no Attribute Inspector e colocaremos em Spacing um espaçamento entre as views filhas de 30.

Spacing

Agora, podemos usar as propriedades de centralização do Auto Layout apenas clicando no nosso Stack View, apertando o CTRL, arrastando para o lado e selecionando a opção Center Vertically in Container:

Center Vertically in Container

Vamos fazer a mesma coisa, mas agora arrastando para o lado direito e selecionando a opção Trailing Space to Container Margin:

Trailing Space to Container Margin

Por fim, vamos arrastar para o lado esquerdo e selecionaremos a propriedade Leading Space To Container Margin.

Leading Space to Container Margin

Clicando em ambas linhas-guia azuis, vamos definir essa constante para 30 pt:

Horizontal Space constant

Por fim, vamos clicar no último botão no canto inferior direito da nossa tela (Resolve Auto Layout Issues) e, em seguida, Update Frames:

Update Frames

Com isso, temos nosso layout fluido, centralizado em qualquer tela! Faça o teste e rode a aplicação!

Resultado na vertical com Auto Layout Resultado na horizontal com Auto Layout

Veja que conseguimos esse resultado bastante interessante com apenas com alguns cliques! E isso é apenas o começo para demonstrar o poder do Auto Layout juntamente com views agrupadas.

E você, já havia usado Auto Layout nas suas aplicações ou achava que era um bicho de sete cabeças?

Veja outros artigos sobre Mobile