541 votes

Comment faire pour obtenir l'écran de la largeur et de la hauteur dans iOS?

Comment peut-on obtenir les dimensions de l'écran dans iOS?

Actuellement, j'utilise:

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

en viewWillAppear: et willAnimateRotationToInterfaceOrientation:duration:

La première fois que je reçois de l'ensemble de la taille de l'écran. La deuxième fois que je reçois de l'écran, moins la barre de navigation.

1101voto

Caleb Points 72897

Le problème avec le code que vous avez posté, c'est que vous comptez sur la taille d'affichage pour correspondre à l'écran, et comme vous l'avez vu ce n'est pas toujours le cas. Si vous avez besoin de la taille de l'écran, vous devriez regarder l'objet qui représente l'écran lui-même, comme ceci:

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

63voto

Ege Akpinar Points 1352

Attention, [UIScreen écran principal] contient la barre d'état ainsi, si vous souhaitez récupérer l'image de votre application (à l'exclusion de la barre de statut), vous devez utiliser

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

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

39voto

Luke Mcneice Points 2687

J'ai utilisé ces méthodes pratiques avant:

- (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;
} 

15voto

A Random User Points 83

Je me rends compte que c'est un vieux post, mais je trouve parfois utile de #définir des constantes comme ceux-ci si je n'ai pas à vous inquiéter à ce sujet:

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

Au-dessus de la constante doit renvoyer la bonne taille peu importe l'orientation du périphérique. Les dimensions est aussi simple que:

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

13voto

Michael G. Emmons Points 16681

C'est très, très facile de retirer votre appareil de la taille ainsi que de prendre en compte l'orientation:

// 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];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X