Como obter as dimensões da tela no iOS?
O problema com o código que você postou é que você conta com o tamanho da visualização para corresponder ao tamanho da tela e, como você viu, nem sempre é esse o caso. Se você precisar do tamanho da tela, observe o objeto que representa a própria tela, assim:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Atualização para exibição dividida: nos comentários, Dmitry perguntou:
Como posso obter o tamanho da tela na exibição dividida?
O código fornecido acima informa o tamanho da tela, mesmo no modo de tela dividida. Quando você usa o modo de tela dividida, a janela do seu aplicativo muda. Se o código acima não fornecer as informações que você espera, então, como o OP, você está vendo o objeto errado. Nesse caso, porém, você deve olhar para a janela em vez da tela, assim:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Swift 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
e, emCGRectGetHeight()
vez de acessar diretamente osize
campo no retângulo. Acho que nunca será um problema com relação ao retângulo da tela, mas suponho que seja algo para estar ciente.Cuidado, [UIScreen mainScreen] também contém uma barra de status. Se você deseja recuperar o quadro para o seu aplicativo (excluindo a barra de status), use
fonte
return [[UIScreen mainScreen] bounds].size.width;
Traduzi algumas das respostas do Objective-C acima para o código Swift. Cada tradução é prosseguida com uma referência à resposta original.
Resposta Principal
Resposta de Função Simples
Resposta da orientação do dispositivo
Resposta do log
fonte
return UIScreen.mainScreen().bounds].size.width
Eu usei esses métodos de conveniência antes:
fonte
Percebo que este é um post antigo, mas às vezes acho útil definir # constantes como essas, para que não precise me preocupar com isso:
A constante acima deve retornar o tamanho correto, independentemente da orientação do dispositivo. Em seguida, obter as dimensões é tão simples quanto:
fonte
É muito, muito fácil obter o tamanho do seu dispositivo e levar em consideração a orientação:
fonte
UIAlertView
irá se inserir como a visualização rootViewController da keyWindow. Eu tenho uma lógica que evita a caixa do canto porque, se uma exibição de alerta estiver ativa, o usuário não poderá interagir com o teclado, portanto, normalmente não há necessidade de pegar o quadro do teclado naquele momento.Temos que considerar também a orientação do dispositivo:
fonte
fonte
Aqui eu atualizei para o swift 3
applicationFrame descontinuado do iOS 9
Em rápida três eles removeram () e eles mudaram alguns convenção de nomeação, você pode consultar aqui Ligação
fonte
A resposta moderna:
se o seu aplicativo oferecer suporte à exibição dividida no iPad, esse problema se tornará um pouco complicado. Você precisa do tamanho da janela, não da tela, que pode conter 2 aplicativos. O tamanho da janela também pode variar durante a execução.
Use o tamanho da janela principal do aplicativo:
Nota: O método acima pode obter um valor errado antes que a janela se torne a janela principal ao iniciar. se você precisar apenas de largura, o método abaixo é muito recomendado :
A solução antiga usando
UIScreen.main.bounds
retornará os limites do dispositivo. Se seu aplicativo estiver sendo executado no modo de exibição dividida, ele obterá as dimensões incorretas.self.view.window
na resposta mais quente, o tamanho pode ficar errado quando o aplicativo contiver 2 ou mais janelas e a janela tiver tamanho pequeno.fonte
Utilize-os
Structs
para saber informações úteis sobre o dispositivo atual no Swift 3.0fonte
Se você deseja largura / altura da tela, independentemente da orientação do dispositivo (bom para dimensionar retrato, apenas visualize controladores sendo iniciados a partir de orientações de paisagem):
fonte
Aqui está uma maneira rápida de obter tamanhos de tela:
Eles estão incluídos como uma função padrão em:
https://github.com/goktugyil/EZSwiftExtensions
fonte
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
fonte
swift 3.0
para largura
para altura
fonte
Você pode colocar essas macros no arquivo pch e usá-las em qualquer lugar do projeto usando "SCREEN_WIDTH"
e "SCREEN_HEIGHT"
Exemplo de uso:
fonte