Comment obtenir les dimensions de l'écran dans iOS?
Le problème avec le code que vous avez publié est que vous comptez sur la taille de la vue pour correspondre à celle de 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 devez 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;
Mise à jour pour la vue partagée: Dans les commentaires, Dmitry a demandé:
Comment obtenir la taille de l'écran dans la vue fractionnée?
Le code donné ci-dessus indique la taille de l'écran, même en mode écran partagé. Lorsque vous utilisez le mode écran partagé, la fenêtre de votre application change. Si le code ci-dessus ne vous donne pas les informations que vous attendez, alors comme l'OP, vous regardez le mauvais objet. Dans ce cas, cependant, vous devriez regarder la fenêtre au lieu de l'écran, comme ceci:
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()
etCGRectGetHeight()
au lieu d'accéder directement ausize
champ dans le rectangle. Je ne pense pas que ce soit un problème avec le rectangle d'écran, mais je suppose que c'est quelque chose dont il faut être conscient.Attention, [UIScreen mainScreen] contient également une barre d'état, si vous souhaitez récupérer le cadre de votre application (à l'exclusion de la barre d'état), vous devez utiliser
la source
return [[UIScreen mainScreen] bounds].size.width;
J'ai traduit certaines des réponses Objective-C ci-dessus en code Swift. Chaque traduction est effectuée avec une référence à la réponse originale.
Réponse principale
Réponse de fonction simple
Réponse d'orientation de l'appareil
Journal réponse
la source
return UIScreen.mainScreen().bounds].size.width
J'ai déjà utilisé ces méthodes pratiques:
la source
Je me rends compte que c'est un ancien article, mais parfois je trouve utile de # définir des constantes comme celles-ci, donc je n'ai pas à m'en soucier:
La constante ci-dessus doit renvoyer la taille correcte quelle que soit l'orientation de l'appareil. Ensuite, obtenir les dimensions est aussi simple que:
la source
Il est très, très facile d'obtenir la taille de votre appareil et de prendre en compte l'orientation:
la source
UIAlertView
s'insérera en tant que vue rootViewController de keyWindow. J'ai une logique qui évite le cas du coin parce que si une vue d'alerte est en place, l'utilisateur ne peut pas interagir avec le clavier, il n'est donc généralement pas nécessaire de saisir le cadre du clavier à ce moment.Nous devons également considérer l'orientation de l'appareil:
la source
la source
Ici, j'ai mis à jour pour swift 3
applicationFrame déconseillé d'iOS 9
Dans swift trois, ils ont supprimé () et ils ont changé quelques conventions de dénomination, vous pouvez vous référer ici Lien
la source
La réponse moderne:
si votre application prend en charge la vue fractionnée sur iPad, ce problème devient un peu compliqué. Vous avez besoin de la taille de la fenêtre, pas de celle de l'écran, qui peut contenir 2 applications. La taille de la fenêtre peut également varier lors de l'exécution.
Utilisez la taille de la fenêtre principale de l'application:
Remarque: La méthode ci-dessus peut obtenir une valeur incorrecte avant que la fenêtre ne devienne une fenêtre clé au démarrage. si vous avez seulement besoin de largeur, la méthode ci-dessous est très recommandée :
L'ancienne solution utilisant
UIScreen.main.bounds
retournera les limites de l'appareil. Si votre application s'exécute en mode d'affichage fractionné, elle obtient les mauvaises dimensions.self.view.window
dans la réponse la plus chaude, la taille peut être incorrecte lorsque l'application contient 2 fenêtres ou plus et que la fenêtre est de petite taille.la source
Utilisez-les
Structs
pour connaître des informations utiles sur le périphérique actuel dans Swift 3.0la source
Si vous souhaitez une largeur / hauteur d'écran quelle que soit l'orientation de l'appareil (idéal pour le dimensionnement portrait uniquement, les contrôleurs de vue sont lancés à partir des orientations paysage):
la source
Voici une façon rapide d'obtenir des tailles d'écran:
Ceux-ci sont inclus en tant que fonction standard dans:
https://github.com/goktugyil/EZSwiftExtensions
la source
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
la source
swift 3.0
pour largeur
pour hauteur
la source
Vous pouvez placer ces macros dans votre fichier pch et les utiliser n'importe où dans le projet en utilisant "SCREEN_WIDTH"
et "SCREEN_HEIGHT"
Exemple d'utilisation:
la source