[UIApplication sharedApplication].statusBarFrame.size.height
. Mas como todos os tamanhos estão em pontos, não em pixels, a altura da barra de status sempre é igual a 20.
Atualizar. Vendo esta resposta sendo considerada útil, devo elaborar.
A altura da barra de status é, de fato, igual a 20.0f pontos, exceto nos seguintes casos:
- barra de status foi ocultada com o
setStatusBarHidden:withAnimation:
método e sua altura é igual a 0,0f pontos;
- como o @Anton apontou aqui, durante uma chamada recebida fora do aplicativo Phone ou durante a altura da barra de status da sessão de gravação de som é igual a 40,0f pontos.
Há também um caso de barra de status que afeta a altura da sua visualização. Normalmente, a altura da vista é igual à dimensão da tela para determinada orientação menos a altura da barra de status. No entanto, se você animar a barra de status (mostrar ou ocultar) após a exibição, a barra de status mudará seu quadro, mas a exibição não será exibida. , será necessário redimensionar manualmente a exibição após a animação da barra de status (ou durante a animação desde a altura da barra de status é definida como o valor final no início da animação).
Atualização 2. Há também um caso de orientação da interface do usuário. A barra de status não respeita o valor da orientação; portanto, o valor da altura da barra de status para o modo retrato é [UIApplication sharedApplication].statusBarFrame.size.height
(sim, a orientação padrão é sempre retrato, não importa o que o aplicativo info.plist diz), para paisagem - [UIApplication sharedApplication].statusBarFrame.size.width
. Para determinar a orientação atual da interface do usuário quando estiver fora UIViewController
e self.interfaceOrientation
não estiver disponível, use [UIApplication sharedApplication].statusBarOrientation
.
Atualização para iOS7. Embora o estilo visual da barra de status tenha mudado, ele ainda está lá, seu quadro ainda se comporta da mesma maneira. A única interessante encontrar cerca de barra de status Eu tenho - Eu share: o seu UINavigationBar
's azulejos de fundo também vai estar lado a lado para a barra de status, de modo que você pode conseguir alguns efeitos interessantes de design ou apenas colorir sua barra de status. Isso também não afetará a altura da barra de status de forma alguma.
Siga a sugestão de Martin para a pergunta: Obter a altura da barra de status do iPhone .
E em Swift
Parece um hack, mas na verdade é bastante sólido. Enfim, é a única solução funcional.
Resposta antiga
O código a seguir, que entraria em sua subclasse personalizada de
UIViewController
, quase funcionou para dar suporte ao cenário. Porém, notei uma caixa de canto (ao girar da direita> sem suporte de cabeça para baixo> esquerda) para a qual não funcionava (altura e largura alteradas).fonte
statusBarFrame
é retornado como o valor antes da transformação.var statusBarHeight: CGFloat
Tente o seguinte:
fonte
Swift 3 ou Swift 4:
fonte
Embora a barra de status geralmente tenha 20 pontos de altura, pode ser o dobro dessa quantidade em algumas situações:
Apenas tente e você verá por si mesmo. Codificar a altura para 20pt normalmente funcionará, até que não funcione.
Então eu segundo a resposta do H2CO3:
fonte
EDITAR A maneira do iOS 11 de descobrir onde colocar o topo do conteúdo da visualização é na
safeAreaLayoutGuide
Consulte a documentação do UIView .Resposta obsoleta Se você está direcionando o iOS 7+, a documentação do UIViewController aconselha que a
topLayoutGuide
propriedade viewController fornece a parte inferior da barra de status ou a parte inferior da barra de navegação, se também estiver visível. Isso pode ser útil e certamente é menos invasivo do que muitas das soluções anteriores.fonte
Não esqueça que o quadro da barra de status estará no espaço de coordenadas da tela! Se você iniciar no modo paisagem, poderá descobrir que largura e altura são trocadas. Eu recomendo fortemente que você use esta versão do código caso suporte as orientações da paisagem:
Você pode ler diretamente a propriedade height do statusBarFrame. 'View' nesse caso deve ser a vista em que você deseja fazer uso das medições, provavelmente o controlador de vista raiz da janela do aplicativo.
Aliás, não apenas a barra de status pode ser mais alta durante as chamadas telefônicas, como também pode ser zero se a barra de status tiver sido deliberadamente oculta.
fonte
Aqui está uma maneira rápida de obter a altura da barra de status da tela:
Eles estão incluídos como uma função padrão em um projeto meu: https://github.com/goktugyil/EZSwiftExtensions
fonte
Para o iOS 13, você pode usar:
fonte
fonte
Por padrão, a altura da barra de status no iOS é
20 pt
.Mais informações: http://www.idev101.com/code/User_Interface/sizes.html
fonte
Acabei de encontrar uma maneira de permitir que você não acesse diretamente a altura da barra de status, mas calcule-a.
Altura da barra de navegação - comprimento do topLayoutGuide = altura da barra de status
Rápido:
self.topLayoutGuide.length
é a área superior coberta pela barra translúcida eself.navigationController?.navigationBar.frame.height
é a barra translúcida, excluindo a barra de status, que geralmente é de 44 pontos. Portanto, usando esse método, você pode calcular facilmente a altura da barra de status sem se preocupar com a alteração da altura da barra de status devido a chamadas telefônicas.fonte
self.topLayoutGuide.length
é 0, então o resultado acaba sendo -44.Swift 5
UIApplication.shared.statusBarFrame.height
fonte
Usando o código de linha única a seguir, você pode obter a altura da barra de status em qualquer orientação e também se estiver visível ou não
É apenas uma macro simples, mas muito útil, tente isso, você não precisa escrever nenhum código extra
fonte