Como esconder um elemento visual em swift

Eduardo Lombardi
2 min readNov 23, 2020

--

Photo by Dmitry Ratushny on Unsplash

Existe algumas formas de se esconder um elemento visual em uma UIView. Neste artigo vou falar um pouco mais sobre elas, suas vantagens e desvantagens;

Parece algo bobo, mas tem toda uma ciência por trás!

Constraints:

Podemos simplismente alterar a constant das constraints da view que queremos esconder para 0 (eg: altura e/ou largura) e aí ela vai sumir da tela.

Mas para o exemplo acima, se a gente alterar essas constraints da view 1 (que desejamos esconder) o layout vai se desconfigurar todo porque vai continuar querendo respeitar as constraints existentes de distância, mesmo com a view 1 tendo tamanho (0,0).

isHidden = true

Eu vejo muita gente se confundindo e utilizando este método para esconder um elemento visual dentro de uma UIView. Pegando o exemplo anterior, qual será o resultado se a gente aplicar view1.isHidden = true? Dessa forma a view vai continuar aonde ela está, e todas as constraints também. O que vai sumir é a camada de renderização (layer) da view. Então ficamos com um espaço em branco entre a view 2 e view 3, o que não é a melhor das soluções.

removeFromSuperview()

Essa é a maneira mais complexa de se esconder uma view, mas também é a que te permite ter o maior controle sobre o layout. Ao chamar removeFromSuperview() você estará removendo a view da pilha de views da superview, da memória e ela estará levando junto todas as constraints. Então, para esse caso acima demonstrado, temos que adicionar constraints para lidar quando a view não estiver mais lá.

Ela pode ter prioridade baixa e somente quando necessária será aplicada. Vale lembrar também que se quisermos adicionar a view novamente devemos fazer com addSubview já que aquela instancia anterior não existe mais. Outro ponto é que se você estiver usando IBOutlets e eles estiverem com force-unwrap (!) o app vai crashar caso você tente acessar a view depois de remover a mesma.

Me segue no instagram, se inscreve no meu canal no youtube, me segue no twitter também, e não esquece de dar uma conferida nesse meu app.

--

--

No responses yet