351 votos

Cómo obtener el ancho y alto de pantalla en iOS?

¿Cómo puede uno obtener las dimensiones de la pantalla en iOS?

En la actualidad, yo uso:

lCurrentWidth = self.view.frame.size.width;
lCurrentHeight = self.view.frame.size.height;

en viewWillAppear: y willAnimateRotationToInterfaceOrientation:duration:

La primera vez que me meto todo el tamaño de la pantalla. La segunda vez que tengo la pantalla de menos la barra de navegación.

814voto

Caleb Puntos 72897

El problema con el código publicado es que usted está contando en la vista de tamaño para que coincida con el de la pantalla, y como ha visto que no es siempre el caso. Si usted necesita el tamaño de la pantalla, usted debe mirar el objeto que representa la pantalla en sí, como este:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

50voto

Ege Akpinar Puntos 1352

Cuidado, [UIScreen pantalla principal] contiene la barra de estado, si desea recuperar el marco de la aplicación (excluyendo la barra de estado) debe utilizar

+ (CGFloat) window_height   {
    return [UIScreen mainScreen].applicationFrame.size.height;
}

+ (CGFloat) window_width   {
    return [UIScreen mainScreen].applicationFrame.size.width;
}

36voto

Luke Mcneice Puntos 2687

He utilizado estos métodos de conveniencia antes de:

- (CGRect)getScreenFrameForCurrentOrientation {
    return [self getScreenFrameForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

- (CGRect)getScreenFrameForOrientation:(UIInterfaceOrientation)orientation {

    UIScreen *screen = [UIScreen mainScreen];
    CGRect fullScreenRect = screen.bounds;
    BOOL statusBarHidden = [UIApplication sharedApplication].statusBarHidden;

    //implicitly in Portrait orientation.
    if(orientation == UIInterfaceOrientationLandscapeRight || orientation == UIInterfaceOrientationLandscapeLeft){
      CGRect temp = CGRectZero;
      temp.size.width = fullScreenRect.size.height;
      temp.size.height = fullScreenRect.size.width;
      fullScreenRect = temp;
    }

    if(!statusBarHidden){
      CGFloat statusBarHeight = 20;//Needs a better solution, FYI statusBarFrame reports wrong in some cases..
      fullScreenRect.size.height -= statusBarHeight;
    }

    return fullScreenRect;
} 

14voto

A Random User Puntos 83

Me doy cuenta de que este es un viejo post, pero a veces me resulta útil para #define constantes como estos, así que no tiene que preocuparse acerca de esto:

#define DEVICE_SIZE [[[[UIApplication sharedApplication] keyWindow] rootViewController].view convertRect:[[UIScreen mainScreen] bounds] fromView:nil].size

Las anteriores constante debe devolver el tamaño correcto sin importar la orientación del dispositivo. A continuación, obtener las dimensiones es tan simple como:

lCurrentWidth = DEVICE_SIZE.width;
lCurrentHeight = DEVICE_SIZE.height;

12voto

Michael G. Emmons Puntos 16681

Es muy, muy fácil para obtener su tamaño del dispositivo , así como tomar en cuenta la orientación:

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X