Comment détecter le modèle d'appareil par macro? J'avais utilisé quelque chose comme ça mais le résultat sur le simulateur IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Réponses:
Rapide
Regardez-le en action https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Remarque: si par exemple l'iPhone 6 est en mode zoomé, l'interface utilisateur est une version agrandie de l'iPhone 5. Ces fonctions ne déterminent pas le type d'appareil, mais le mode d'affichage, donc l'iPhone 5 est le résultat souhaité dans cet exemple.
Objectif c
Utilisation: http://pastie.org/9687735
Remarque: si par exemple l'iPhone 6 est en mode zoomé, l'interface utilisateur est une version agrandie de l'iPhone 5. Ces fonctions ne déterminent pas le type d'appareil, mais le mode d'affichage, donc l'iPhone 5 est le résultat souhaité dans cet exemple.
la source
Pour Swift:
la source
la source
IS_IPHONE_6_IOS7
etIS_IPHONE_6P_IOS7
ne sont pas nécessaires, l'iPhone 6 (+) ne peut être que sur iOS 8 et supérieur.la source
nativeBounds
vaut mieux utiliser quebounds
. Un iPhone 6 avec Display Zoom on rapportera 568 pour les bounds.height, mais 1334 pour nativeBounds.height, même si Display Zoom n'a aucun effet dans les applications. ( support.apple.com/en-us/HT203073 )J'utilise une classe qui extrait des informations système réelles. Assurez-vous simplement que tous les types d'appareils sont à jour.
la source
Je peux confirmer que le bogue disparaît lorsque vous définissez un écran de lancement.
J'ai conservé mes images de lancement et ajouté MainStoryboard à l'écran de lancement et le simulateur a correctement reconnu les appareils.
la source
Il vaut mieux ne pas lier votre code à des types d'appareils. Cela conduira à un alambiqué inflexible. Apple veut que vous pensiez aux tailles et non aux appareils. Au cas où vous auriez besoin d'avoir des tailles spéciales pour les appareils plus grands que l'iPhone 5, telles que les tailles d'image ou de police, je vous recommande de créer une classe de normalisation avec un multiplicateur qui augmente votre taille de base d'un certain pourcentage en fonction de la relation entre l'écran de l'iPhone 5 width et la taille actuelle de l'appareil.
Donc, dans votre code, vous ferez quelque chose comme ça:
la source
static normalize
?Extension UIDeivce avec la syntaxe Swift 3+ .
Exemple d'utilisation:
Réponse originale: https://stackoverflow.com/a/36479017/3659227
la source
Mettre à jour Xcode 11 / Swift 5.1:
Salut, j'ai mis à jour vers Xcode10 / Swift 4.2 et les nouvelles tailles pour IPhone XS / XSMAX / XR
avec détection des Notch-IPhones.
J'espère que cela aide quelqu'un.
}
la source
J'ai rencontré le problème lors de la migration d'un projet iOS 7 vers un projet iOS 8, car je n'ai pas ajouté de scène d'écran de lancement à mon projet.
Dans ce cas, la taille de l'écran pour iPhone 6 et 6+ est celle de l'iPhone 5.
Voir de la documentation Apple; Vous utilisez un fichier de lancement XIB ou de storyboard pour indiquer que votre application fonctionne sur iPhone 6 Plus ou iPhone 6.
la source
la source
Pour plus, vous devez également vérifier le zoom
la source
la source