J'ai exécuté le code suivant dans iOS 7 et iOS 8:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f",
(landscape ? @"Yes" : @"No"),
[[UIScreen mainScreen] bounds].size.width,
[[UIScreen mainScreen] bounds].size.height);
Voici le résultat d'iOS 8:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
Comparé au résultat dans iOS 7:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
Existe-t-il une documentation spécifiant ce changement? Ou est-ce un bogue temporaire dans les API iOS 8?
Réponses:
Oui, cela dépend de l'orientation dans iOS8, pas un bogue. Vous pouvez consulter la session 214 de la WWDC 2014 pour plus d'informations: «Afficher les avancées du contrôleur dans iOS 8»
Citation de la présentation:
UIScreen est désormais orienté interface:
la source
Oui, cela dépend de l'orientation dans iOS8.
J'ai écrit une méthode Util pour résoudre ce problème pour les applications qui doivent prendre en charge les anciennes versions du système d'exploitation.
la source
Oui, en effet, la taille de l'écran dépend désormais de l'orientation dans iOS 8. Parfois, cependant, il est souhaitable d'obtenir une taille fixée à l'orientation portrait. Voici comment je le fais.
la source
Oui, cela dépend désormais de l'orientation.
Je préfère la méthode ci-dessous pour obtenir la taille de l'écran d'une manière indépendante de l'orientation à certaines des réponses ci-dessus, à la fois parce qu'elle est plus simple et parce qu'elle ne dépend d'aucun code d'orientation (dont l'état peut dépendre du heure de leur appel) ou lors de la vérification de version. Vous voudrez peut-être le nouveau comportement d'iOS 8, mais cela fonctionnera si vous en avez besoin pour être stable sur toutes les versions d'iOS.
la source
Lié à cette question car elle a résolu mon problème, voici deux définitions que j'utilise pour les calculs de largeur et de hauteur d'écran:
Si vous prenez en charge à la fois iOS 7 et iOS 8, c'est la meilleure solution à ce problème.
la source
Vous pouvez utiliser
nativeBounds
(indépendamment de l'orientation)nativeBounds
Détection de la hauteur de l'appareil:
Détection de la largeur de l'appareil:
la source
Ce n'est pas un bogue dans le SDK iOS 8. Ils ont fait dépendre l'orientation de l'interface des limites. Selon votre question sur une référence ou une documentation sur ce fait, je vous recommanderai fortement de regarder la
View Controller Advancements in iOS 8
session 214 de la WWDC 2014 . La partie la plus intéressante (selon vos doutes) est celleScreen Coordinates
qui commence à 50h45.la source
Oui, cela dépend de l'orientation dans iOS8.
Voici comment vous pouvez avoir un moyen cohérent de lire les limites à la manière d'iOS 8 sur les versions du SDK et du système d'exploitation.
la source
Ma solution est une combinaison de MaxK et hfossli. J'ai fait cette méthode sur une catégorie d'UIScreen et il n'y a pas de vérification de version (ce qui est une mauvaise pratique):
la source
J'avais besoin d'une fonction d'aide rapide qui gardait le même comportement qu'iOS7 sous iOS8 - cela m'a permis d'échanger mes
[[UIScreen mainScreen] bounds]
appels et de ne pas toucher d'autre code ...la source
La méthode ci-dessous peut être utilisée pour trouver les limites de l'écran pour une orientation donnée, indépendamment de la version iOS. Cette méthode renverra les limites en fonction de la taille de l'écran de l'appareil et donnera la même valeur CGRect indépendamment de la version iOS.
la source
C'est ce que j'ai utilisé pour calculer le bon rect:
la source
L'ajout de la version rapide d'une excellente fonction cbartel a répondu ci-dessus.
la source
Mon problème était lié au cadre UIWindows qui allait en moins. Donc, faites le code comme ci-dessous dans MyViewController - (NSUInteger) supportedInterfaceOrientations, méthode
Et son travail pour moi l'essayer.
la source
iOS 8 ou supérieur
Une solution pour ceux qui veulent connaître la taille de l'écran en points (l'écran de 3,5 pouces a 320 × 480 points, l'écran de 4,0 pouces a 320 × 568 points, etc.) serait
la source
Une chose que j'ai notée est que l' ordre des orientations d'interface prises en charge dans Info.plist importe. J'ai eu le problème de cette question avec mon application (qui fait l'orientation dans le code), mais je n'ai spécifié nulle part que l'orientation par défaut est Portrait.
Je pensais que l'orientation par défaut était Portrait en tout cas.
La réorganisation des itens dans Info.plist, en mettant Portrait en premier, a restauré le comportement attendu.
la source
Cela donnera le bon appareil dans iOS7 et iOS8 à la fois,
// Vous pouvez également ajouter d'autres appareils (ieiPad).
la source
Utilisé la solution de mnemia légèrement modifiée, celle-là sans vérification de version iOS, utilisant min / max sur les limites de l'écran principal.
Il me fallait un
CGRect
si obtenuCGRect
de limites mainScreen et changésize.width=min(w,h)
,size.height=max(w,h)
. Ensuite , j'ai appelé ce système d' exploitation indépendant getCGRect
fonction en deux endroits dans mon code, où j'obtenir la taille de l' écran pourOpenGL
, des touches , etc. Avant de fixer j'ai eu 2 problèmes - sur IOS 8.x en position d'affichage en mode paysage deOpenGL
vue était incorrecte: 1 / 4 de plein écran dans la partie inférieure gauche. Et les secondes touches ont renvoyé des valeurs invalides. Les deux problèmes ont été résolus comme expliqué. Merci!la source