Est [UIScreen écran principal].les limites.taille de devenir orientation-dépendante dans iOS8?
J'ai couru le code suivant dans les deux 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);
Le résultat est le suivant à partir de iOS 8:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
En comparant le résultat dans iOS 7:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
Est-il de la documentation spécifiant ce changement? Ou est-ce un bug passager dans iOS 8 Api?
- Bien le iOS8 sortie semble beaucoup plus logique
Vous devez vous connecter pour publier un commentaire.
Oui, c'est l'orientation-dépendante dans iOS8, pas un bug. Vous pourriez session de l'examen 214 de la WWDC 2014 pour plus d'info: "- Vue-Contrôleur les Progrès dans iOS 8"
Citation de la présentation:
UIScreen est maintenant l'interface orientée:
Oui, c'est l'orientation-dépendante dans iOS8.
J'ai écrit un Util méthode pour résoudre ce problème pour les applications qui doivent prendre en charge les anciennes versions de l'OS.
[UIApplication sharedApplication]
Oui, en effet, la taille de l'écran est maintenant dépendante de l'orientation dans iOS 8. Parfois, cependant, il est souhaité d'obtenir une taille fixe à l'orientation portrait. Voici comment je le fais.
Oui, c'est désormais dépendant de l'orientation.
Je préfère la méthode ci-dessous d'obtenir la taille de l'écran, dans une orientation indépendante de certaines des réponses ci-dessus, à la fois parce que c'est plus simple et parce qu'il ne dépend pas de tout le code d'orientation (l'état de ce qui peut être dépendant de l'heure à laquelle ils sont appelés) ou sur la vérification de version. Vous pouvez le nouvel iOS 8 comportement, mais cela ne fonctionnera que si vous en avez besoin pour être stable sur toutes les versions d'iOS.
Liés à cette question qu'il a résolu mon problème, voici deux définit-je utiliser pour la largeur de l'écran et la hauteur des calculs:
Si vous êtes à la soutenir à la fois l'iOS 7 et iOS 8, c'est la meilleure solution pour ce problème.
Vous pouvez utiliser
nativeBounds
(orientation indépendant)nativeBounds
Détection de l'appareil hauteur:
Détection de l'appareil largeur:
Il n'est pas un bug dans iOS 8 SDK. Ils ont fait des limites de l'interface d'orientation dépendait. En fonction de votre question au sujet de certains de référence ou de la documentation à cet effet, je vous recommande fortement de regarder
View Controller Advancements in iOS 8
il est 214 session de La WWDC 2014. La partie la plus intéressante (selon vos doutes) estScreen Coordinates
qui commence à 50:45.Oui, c'est l'orientation-dépendante dans iOS8.
Voici comment vous pouvez avoir un concistent mode de lecture hors limites dans iOS 8 de la mode à travers le SDK et OS-versions.
Ma solution est une combinaison de MaxK et hfossli. J'ai fait cette méthode sur une Catégorie de UIScreen et il n'a pas de vérification de version (qui est une mauvaise pratique):
J'ai besoin d'une rapide fonction d'assistance qui a gardé le même comportement que iOS7 sous iOS8 - ce qui m'a permis de remplacer mon
[[UIScreen mainScreen] bounds]
appels et de ne pas toucher un autre code...La méthode ci-dessous peut être utilisé pour trouver les limites de l'écran pour une orientation, indépendant de la version iOS. Cette méthode retourne les limites basées sur la taille de l'écran de l'appareil et vous donnera le même CGRect valeur indépendante de la version iOS.
C'est ce que j'ai utilisé pour calculer le bon rect:
Tout en ajoutant la swift version d'une excellente cbartel fonction répondu ci-dessus.
Mon problème était lié à UIWindows cadre qui allait en moins.
Donc fait le code ci-dessous dans MyViewController
-(NSUInteger)supportedInterfaceOrientations Méthode
Et son travail pour moi de l'essayer.
iOS 8 ou supérieur
Une solution pour ceux qui veulent savoir la taille de l'écran en points (3,5 pouces d'écran de 320 × 480 points, 4.0 pouces écran de 320 × 568 points, etc) serait
Une chose que j'ai noté est, le ordre de prise en charge de l'interface orientations en Info.plist n'importe. J'ai eu le problème de cette question avec mon application (qui ne l'orientation dans le code), mais je n'ai pas de spécifier n'importe où que l'orientation par défaut est le Portrait.
J'ai pensé que l'orientation par défaut était Portrait en tout cas.
Réorganisant itens en Info.plist, mettant Portrait, première, restauré le comportement attendu.
Cela donnera correct de l'appareil dans iOS7 et iOS8 à la fois,
//Vous pouvez ajouter plus d'appareils en tant que bien(je.e.l'iPad).
Utilisés légèrement modifié mnemia de la solution, que l'un sans version iOS de vérifier, à l'aide de min/max sur l'écran principal de limites.
J'avais besoin d'un
CGRect
ai doncCGRect
d'écran principal de limites et changésize.width=min(w,h)
,size.height=max(w,h)
. Alors j'ai appelé OS indépendant obtenirCGRect
fonction à deux endroits dans mon code, quand je reçois de la taille de l'écran pourOpenGL
, touche etc. Avant de les fixer, j'ai eu 2 problèmes sur IOS 8.x en mode paysage de la position d'affichage deOpenGL
vue était incorrecte: 1/4 du plein écran en bas à gauche de la partie. Et la deuxième touche retourné des valeurs non valides. Les deux problèmes ont été corrigés comme l'a expliqué. Merci!