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.

--

--