ti-enxame.com

Como obter o tamanho da tela usando o código no iOS?

Como obter o tamanho da tela do iPhone para calcular?

44
haisergeant

Você pode usar a propriedade bounds em uma instância do UIScreen:

CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size;  
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

A maioria das pessoas vai querer a tela principal; Se você tem um dispositivo conectado a uma TV, você pode, em vez disso, querer iterar através de UIScreens e obter os limites para cada um.

Mais informações no documentos da classe UIScreen .

93
Tim

Aqui está uma solução 'Swift': (Atualizado para o Swift 3.x)

let screenWidth  = UIScreen.main.fixedCoordinateSpace.bounds.width
let screenHeight = UIScreen.main.fixedCoordinateSpace.bounds.height

Isso informa em pontos e não em pixels e "sempre reflete as dimensões da tela do dispositivo em uma orientação vertical" (Apple Docs) . Não há necessidade de se preocupar com UIAnnoyinglyLongDeviceOrientation!

Se você quiser que a largura e a altura reflitam a orientação do dispositivo:

let screenWidth  = UIScreen.main.bounds.width
let screenHeight = UIScreen.main.bounds.height

Aqui, a largura e a altura inverterão os valores do flop, dependendo de a tela estar no modo retrato ou paisagem.

E aqui está como obter o tamanho da tela medido em pixels não pontos:

let screenWidthInPixels = UIScreen.main.nativeBounds.width
let screenHeightInPixels = UIScreen.main.nativeBounds.height

Isso também "é baseado no dispositivo em uma orientação vertical. Esse valor não muda quando o dispositivo gira" (Apple Docs)

Por favor, note que para Swift 2.xe inferior, você deve usar UIScreen.mainScreen() em vez de UIScreen.main

16
mogelbuster

Use este código para corrigir no iOS8:

float SW;
float SH;
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (( [[[UIDevice currentDevice] systemVersion] floatValue]<8)  && UIInterfaceOrientationIsLandscape(orientation))
{
    SW = [[UIScreen mainScreen] bounds].size.height;
    SH = [[UIScreen mainScreen] bounds].size.width;
}
else
{
    SW = [[UIScreen mainScreen] bounds].size.width;
    SH = [[UIScreen mainScreen] bounds].size.height;
}
8
Guru

Aqui está uma maneira rápida de obter tamanhos de tela:

var screenWidth: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.width
    } else {
        return UIScreen.mainScreen().bounds.size.height
    }
}
var screenHeight: CGFloat {
    if UIInterfaceOrientationIsPortrait(screenOrientation) {
        return UIScreen.mainScreen().bounds.size.height
    } else {
        return UIScreen.mainScreen().bounds.size.width
    }
}
var screenOrientation: UIInterfaceOrientation {
    return UIApplication.sharedApplication().statusBarOrientation
}

Estes são incluídos como uma função padrão aqui .

Isso também está na documentação.

1
Esqarrouth

Use a propriedade bounds de UIView se você quiser saber o tamanho de uma determinada visão ou [[UIScreen mainScreen] bounds] se quiser saber o tamanho da tela do dispositivo.

1
tobiasbayer

Semelhante a acima, mas um pouco menos detalhado:

CGFloat screenWidth = [[UIScreen mainScreen] bounds].size.width;
CGFloat screenHeight = [[UIScreen mainScreen] bounds].size.height;
1
simon_smiley
float screen_Height;
float screen_Width;

if ([[[UIDevice currentDevice] systemVersion] floatValue]  >= 8) {
    screen_Height = [[UIScreen mainScreen] bounds].size.height;
    screen_Width = [[UIScreen mainScreen] bounds].size.width;
} else {
    screen_Height = ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width);
    screen_Width = ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height);
}
1
Bobby

Usar os limites de UIScreen é uma boa maneira de fazê-lo, mas você deve usar as funções CGGeometry para acessar os dados de CGRect ao invés de acessá-los diretamente. Veja o CGGeometrydocs .

CGRect screenBound = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = CGRectGetWidth(screenBound);
CGFloat screenHeight = CGRectGetHeight(screenBound);
0
Lukas Spieß

[[UIScreen mainScreen] bounds] retorna as dimensões da tela física que não levam em consideração a orientação do dispositivo.

Se você precisar obter o tamanho da tela de acordo com a orientação atual, consulte Como obter a altura e largura da tela dependendo da orientação?

0
Mike

Supondo que você queira levar em conta a orientação atual, use:

float screen_width;
float screen_height;
float vers = [[[UIDevice currentDevice] systemVersion] floatValue];
UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation;
if (vers < 8 && UIInterfaceOrientationIsLandscape(orient))
{
    screen_height = [[UIScreen mainScreen] bounds].size.width;
    screen_width = [[UIScreen mainScreen] bounds].size.height;
}
else
{
    screen_width = [[UIScreen mainScreen] bounds].size.width;
    screen_height = [[UIScreen mainScreen] bounds].size.height;
}
0
CpnCrunch