Wie erkennt man ein Gerätemodell per Makro? Ich hatte so etwas benutzt, aber das Ergebnis auf dem Simulator war immer 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)
Antworten:
Schnell
Sehen Sie es in Aktion https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Hinweis: Wenn sich z. B. das iPhone 6 im Zoom-Modus befindet, ist die Benutzeroberfläche eine vergrößerte Version des iPhone 5. Diese Funktionen bestimmen nicht den Gerätetyp, sondern den Anzeigemodus. Daher ist das iPhone 5 in diesem Beispiel das gewünschte Ergebnis.
Ziel c
Verwendung: http://pastie.org/9687735
Hinweis: Wenn sich z. B. das iPhone 6 im Zoom-Modus befindet, ist die Benutzeroberfläche eine vergrößerte Version des iPhone 5. Diese Funktionen bestimmen nicht den Gerätetyp, sondern den Anzeigemodus. Daher ist das iPhone 5 in diesem Beispiel das gewünschte Ergebnis.
quelle
Für Swift:
quelle
quelle
IS_IPHONE_6_IOS7
undIS_IPHONE_6P_IOS7
werden nicht benötigt, iPhone 6 (+) kann nur auf iOS 8 und höher sein.quelle
nativeBounds
ist besser zu bedienen alsbounds
. Ein iPhone 6 mit aktiviertem Anzeigezoom meldet 568 für bounds.height, 1334 für nativeBounds.height, obwohl Display Zoom in Apps keine Auswirkungen hat. ( support.apple.com/en-us/HT203073 )Ich verwende eine Klasse, die aktuelle Systeminformationen abruft. Sie müssen nur sicherstellen, dass alle Gerätetypen auf dem neuesten Stand sind.
quelle
Ich kann bestätigen, dass der Fehler behoben ist, wenn Sie einen Startbildschirm einrichten.
Ich habe meine Startbilder beibehalten und MainStoryboard zum Startbildschirm hinzugefügt, und der Simulator hat die Geräte korrekt erkannt.
quelle
Es ist besser, Ihren Code nicht an Gerätetypen zu binden. Dies führt zu einer unflexiblen, verschlungenen. Apple möchte, dass Sie über Größen und nicht über Geräte nachdenken. Für den Fall, dass Sie spezielle Größen für Geräte benötigen, die größer als das iPhone 5 sind, z. B. Bild- oder Schriftgrößen, würde ich empfehlen, eine Normalisierungsklasse mit einem Multiplikator zu erstellen, der Ihre Basisgröße basierend auf der Beziehung zwischen dem iPhone 5-Bildschirm um einen bestimmten Prozentsatz erhöht Breite und die aktuelle Gerätegröße.
In Ihrem Code werden Sie also so etwas tun:
quelle
static normalize
?UIDeivce-Erweiterung mit Swift 3+ -Syntax .
Beispielnutzung:
Ursprüngliche Antwort: https://stackoverflow.com/a/36479017/3659227
quelle
Update Xcode 11 / Swift 5.1:
Hallo, ich habe auf Xcode10 / Swift 4.2 und die neuen Größen für IPhone XS / XSMAX / XR aktualisiert
mit Erkennung von Notch-IPhones.
Hoffe das hilft jemandem.
}}
quelle
Beim Migrieren von einem iOS 7-Projekt zu einem iOS 8-Projekt ist das Problem aufgetreten, da ich meinem Projekt keine Startbildschirmszene hinzugefügt habe.
In diesem Fall entspricht die Bildschirmgröße für iPhone 6 und 6+ iPhone 5.
Siehe aus der Apple-Dokumentation; Sie verwenden eine Start-XIB- oder Storyboard-Datei, um anzuzeigen, dass Ihre App auf dem iPhone 6 Plus oder iPhone 6 ausgeführt wird.
quelle
quelle
Für Plus müssen Sie auch den Zoom überprüfen
quelle
quelle