1
votes

La résolution d'écran réelle de l'iPhone XR diffère de la résolution d'écran donnée par Swift?

Résolution de l'écran de l'iPhone XR en fonction des captures d'écran, du site Web Apple, etc.

828 x 1792

Résolution d'écran de l'iPhone XR selon Swift:

375x812 (ou 750x1624)

Pourquoi et comment y faire face?!

REMARQUE: tous les iphones Xx fonctionnent correctement à l'exception de celui-ci - iphone XR (+ simulateur iphone XR)


3 commentaires

avez-vous vérifié correctement? Comment avez-vous obtenu la `` résolution d'écran de l'iPhone XR selon Swift '':


affichez le code qui vous donne ces valeurs.


po UIScreen.main.bounds dans la console


4 Réponses :


0
votes

Vous obtenez la résolution de l'iphone X, et cela se produit probablement parce que vous utilisez l'iphone X dans le storyboard. Le code vous donne d'abord la résolution du storyboard. Si vous voulez obtenir la taille réelle, appelez la méthode layoutIfNeeded () avant le code qui utilise la résolution


3 commentaires

UIScreen.main.bounds devrait obtenir le rect avec une taille qui n'est pas modifiée sur le même appareil pendant le temps. Même en rotation, la largeur et la hauteur sont permutées mais la paire de leurs valeurs n'est pas modifiée


yep UIScreen.main.bounds devrait toujours avoir la bonne taille mais ce n'est pas une bonne pratique de l'utiliser. Vous pouvez l'utiliser dans des situations complexes, lorsque vous ne pouvez pas obtenir la taille de l'écran d'une autre manière


homme je le sais mais le problème que je décris est que toutes ces méthodes renvoient taille x échelle mais l'appareil a une résolution taille2 x échelle et taille <> taille2



1
votes

Il y a une différence entre la taille physique de l'écran et la taille UIKit (pixels vs points).

UIKit utilise des points, un point peut être composé de plusieurs pixels (c'est là que @ 2x, @ 3x) entre en jeu.

La principale différence entre le XR et les autres appareils X est que le XR utilise @ 2x et les autres appareils sont @ 3x.

Voici la documentation d'Apple à ce sujet: https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/Displays/Displays.html

PaintCode a également créé un graphique très pratique pour illustrer ceci:

https://www.paintcodeapp.com/news/ultimate -guide-aux-résolutions-iphone

MODIFIER pour répondre au commentaire de rmaddy.

Si le storyboard est configuré pour afficher l'iPhone X, c'est la taille qui sera renvoyée jusqu'à ce que les vues soient disposées.


2 commentaires

Cela n'explique pas pourquoi l'OP voit des références à 828x1792 pixels et un code lui indiquant que c'est 750-x1624.


A édité ma réponse en réponse à votre commentaire, vous faites un bon point



1
votes

Il existe deux concepts différents: Taille UIKit et Résolution native .

La taille UIKit est représentée par points et est utilisée lorsque vous vous positionnez des vues dans votre projet. Supposons que votre écran mesure 414x896 points et que vous centrez votre vue sur la position [207,448], votre vue sera au centre de l'écran.

La résolution native est représentée par pixels strong> et il indique la quantité de pixels de l'écran de l'appareil. Vous pouvez obtenir la résolution native de l'appareil en multipliant la taille UIKit par le Facteur d'échelle natif qui est individuel pour chaque appareil.

J'ai créé un tableau pour ces tailles, facteurs sclae et résolution pour tous les iPhones qui prend en charge iOS 12

UIScreen.main.nativeBounds

... à partir de ce tableau, vous pouvez voir que votre iPhone Xr a une taille UIKit 414x896 , et non 375x812 comme vous l'avez écrit dans votre question.

Vous pouvez obtenir la taille UIKit de l'appareil en obtenant les limites de l'écran

UIScreen.main.bounds

et la résolution native en obtenant les limites natives

iPhone       | UIKit size (points) | Native resolution (pixels) | Native Scale factor
-------------|---------------------|----------------------------|--------------------
Xs Max       | 414x896             | 1242x2688                  | 3
X, Xs        | 375x812             | 1125x2436                  | 3
Xr           | 414x896             | 828x1792                   | 2
6+,6s+,7+,8+ | 414x736             | 1080x1920                  | 2.608
6,6s,7,8     | 375x667             | 750x1334                   | 2
5s,SE        | 320x568             | 640x1136                   | 2

... chacun d'entre eux fonctionne bien pour l'iPhone Xr, alors vérifiez à nouveau si vous exécutez votre code sur l'iPhone Xr et non sur l'iPhone Xs / X qui a la taille UIKit 375 x 812 . De plus, cette 750x1624 n'est qu'une étrange échelle de résolution native Xr, alors vérifiez si vous ne faites pas de calculs supplémentaires.


2 commentaires

man j'ai le même résultat en utilisant nativeBounds ! Même selon votre table résolution native = taille UIKit * échelle native . En réalité, il semble que le simulateur XR et l'appareil réel fonctionnent comme X / XS mais avec un facteur d'échelle == 2.


@VyachaslavGerchicov êtes-vous sûr d'exécuter votre code sur xr et non sur xs? Regardez le dernier paragraphe de ma réponse



1
votes

Ceci est dû au fait que le "Zoom d'affichage" est activé sur votre iPhone XR.

Paramètres -> Affichage et luminosité -> Zoom d'affichage -> Régler sur Standard


0 commentaires