Como não uso storyboards para criar minhas visualizações, gostaria de saber se existe a opção "Usar guias de área segura" programaticamente ou algo parecido.
Eu tentei ancorar minhas visões em
view.safeAreaLayoutGuide
mas eles continuam se sobrepondo ao topo do simulador do iPhone X.
ios
swift
iphone-x
safearealayoutguide
Phillip
fonte
fonte
view.safeAreaInsets
? Você tentou isso?Respostas:
Aqui está um código de amostra (Ref de: Guia de layout de área segura ):
Se você criar suas restrições no código, use a propriedade safeAreaLayoutGuide de UIView para obter as âncoras de layout relevantes. Vamos recriar o exemplo do Interface Builder acima no código para ver como fica:
Supondo que temos a visão verde como uma propriedade em nosso controlador de visão:
Podemos ter uma função para configurar as visualizações e restrições chamadas de viewDidLoad:
Crie as restrições de margem esquerda e direita como sempre usando o layoutMarginsGuide da visualização raiz:
Agora, a menos que você esteja visando o iOS 11 e posterior, você precisará envolver as restrições do guia de layout da área segura com #available e voltar aos guias de layout superior e inferior para versões anteriores do iOS:
Resultado:
Aqui está a documentação oficial do desenvolvedor da Apple para o guia de layout de área segura
A área de segurança é necessária para lidar com o design da interface do usuário para iPhone-X. Aqui estão as diretrizes básicas para como projetar a interface do usuário para iPhone-X usando o Layout de área segura
fonte
Na verdade, estou usando uma extensão para ele e controlando se é ios 11 ou não.
fonte
self.safeAreaLayoutGuide
vez deself.layoutMarginsGuide
. O seguro usado nesta resposta funcionou corretamente para eu ficar dentro da área segura! Uma coisa que eu sugeriria mudar seria usarleadingAnchor
e emtrailingAnchor
vez deleftAnchor
erightAnchor
. Bravo!SafeAreaLayoutGuide
éUIView
propriedade,Use
safeAreaLayoutGuide
para evitar que nossos objetos sejam cortados / sobrepostos a partir de cantos arredondados, barras de navegação, barras de guias, barras de ferramentas e outras visualizações ancestrais.Podemos criar
safeAreaLayoutGuide
objeto e definir restrições de objeto, respectivamente.As restrições para retrato + paisagem são -
UILayoutGuide
safeAreaLayoutGuide
fonte
viewDidAppear
, a menos que você saiba absolutamente o que está fazendo.viewDidAppear
é chamado várias vezes e, portanto, suas restrições serão duplicadas toda vez que for chamado.Para aqueles de vocês que usam o SnapKit , assim como eu, a solução é ancorar suas restrições para
view.safeAreaLayoutGuide
:fonte
Estou usando isso em vez de adicionar restrições de margem inicial e final ao layoutMarginsGuide:
Verifique também a opção de versão inferior do ios 11 na resposta de Krunal.
fonte
Use
UIWindow
ouUIView
'ssafeAreaInsets
.bottom
.top
.left
.right
fonte
Use restrições com formato visual e você terá respeito pela área segura gratuitamente.
fonte
Extensão de área segura para Objective-C
fonte
Swift 4.2 e 5.0. Suponha que você queira adicionar restrições à esquerda, à direita, superior e inferior ao viewBg. Então, você pode usar o código abaixo.
fonte
Esta extensão ajuda a restringir um UIVIew à sua superview e superview + safeArea:
fonte
Você pode usar view.safeAreaInsets conforme explicado aqui https://www.raywenderlich.com/174078/auto-layout-visual-format-language-tutorial-2
amostra de código (retirada de raywenderlich.com):
fonte