Was entspricht UI_USER_INTERFACE_IDIOM()
in Swift der Erkennung zwischen iPhone und iPad?
Use of unresolved identifier
Beim Kompilieren in Swift wird eine Fehlermeldung angezeigt.
Wenn Sie mit Swift arbeiten, können Sie Folgendes verwenden enum
UIUserInterfaceIdiom
:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Sie können es also verwenden als:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Oder mit einer Switch-Anweisung:
switch UIDevice.current.userInterfaceIdiom {
case .phone:
// It's an iPhone
case .pad:
// It's an iPad (or macOS Catalyst)
case .unspecified:
// Uh, oh! What could it be?
}
UI_USER_INTERFACE_IDIOM()
ist ein Objective-C-Makro, das wie folgt definiert ist:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Beachten Sie außerdem, dass das UI_USER_INTERFACE_IDIOM()
Makro auch bei der Arbeit mit Objective-C nur für iOS 3.2 und niedriger erforderlich ist. Bei der Bereitstellung unter iOS 3.2 und höher können Sie diese [UIDevice userInterfaceIdiom]
direkt verwenden.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
wirdUIDevice.current.userInterfaceIdiom
Sie sollten dieses GBDeviceInfo- Framework verwenden oder ...
Apple definiert dies:
Für die strikte Definition des Geräts kann dieser Code verwendet werden
wie benutzt man
iOS-Version zu erkennen
wie benutzt man
quelle
struct ScreenSize/DeviceType
Ansatz, da es in SimulatorSwift 2.0 & iOS 9 & Xcode 7.1
Swift 3.0 und Swift 4.0
Verwenden Sie UITraitCollection. Die iOS-Trait-Umgebung wird über die traitCollection- Eigenschaft des UITraitEnvironment-Protokolls verfügbar gemacht. Dieses Protokoll wird von folgenden Klassen übernommen:
quelle
if / else case:
quelle
Ich mache das so:
Es zeigt den Namen des Geräts.
So überprüfen Sie, ob es sich um ein iPad oder iPhone handelt:
quelle
Swift 2.x:
Neben der Antwort von Beslav Turalov ist der neue Eintrag iPad Pro mit dieser Zeile leicht zu finden
Swift 3 (TV und Auto hinzugefügt):
VERWENDUNG :
quelle
Versuchen Sie, eine Erweiterung wie die folgende hinzuzufügen:
So werden Sie es verwenden:
BEARBEITEN Für den Simulator können Sie hier eine Lösung ausprobieren
quelle
Swift 4.2-Erweiterung
Verwendung
quelle
In Swift 4 & Xcode 9.2 können Sie auf folgende Weise erkennen, ob es sich bei einem Gerät um ein iPhone / iPad handelt.
Ein anderer Weg
quelle
Vielen Dank an alle Unterstützung :))
UIDevice + Extensions.swift
SharedFunctions.swift
String + Whitespace.swift
quelle
Versuchen Sie dies, um zu überprüfen, ob das aktuelle Gerät iPhone oder iPad ist:
Swift 5
Verwenden:
quelle
Swift 2.0 und iOS 7+ / iOS 8+ / iOS 9+
Verwenden :
ODER
Danke @ user3378170
quelle
Zu Ihrer Information, ich habe
UI_USER_INTERFACE_IDIOM()
für meine App in Swift geschrieben. Die App kann mit XCode 6.3.1 ohne Warnung auf diesen Befehl gut kompiliert werden, läuft gut auf Simulator (mit ausgewählten Geräten) und auf allen meinen realen Geräten (iPhone, iPad) mit iOS-Versionen von 7.1 bis 8.3.Die App stürzte jedoch auf den Geräten der Apple-Prüfer ab (und wurde abgelehnt). Ich habe einige Tage gebraucht, um das Problem mit einigen weiteren erneuten Uploads auf iTunes Connect zu erkennen.
Jetzt benutze ich
UIDevice.currentDevice().userInterfaceIdiom
stattdessen und meine App kann von solchen Abstürzen überleben.quelle
Wenn Sie das aktuelle Gerät auf iPad oder iPhone überprüfen möchten, können Sie folgende Codezeile verwenden:
quelle
Swift 3.0 :
quelle
Zu den obigen Antworten wurden einige Ergänzungen vorgenommen, damit Sie anstelle des Zeichenfolgenwerts einen Typ zurückgeben.
Ich dachte mir, dass dies hauptsächlich für Anpassungen der Benutzeroberfläche verwendet wird, daher hielt ich es nicht für relevant, alle Untermodelle, dh das iPhone 5s, einzubeziehen, aber dies könnte leicht durch Hinzufügen von Modelltests zum isDevice-Array erweitert werden
Getestet in Swift 3.1 Xcode 8.3.2 mit physischen Geräten und Simulatorgeräten
Implementierung:
UIDevice.whichDevice()
Ich habe ein Framework namens SVNBootstaper erstellt, das dieses und einige andere Hilfsprotokolle enthält. Es ist öffentlich und über Karthago erhältlich.
quelle
Seit iOS 13
UI_USER_INTERFACE_IDIOM
ist veraltet. Wenn Ihr Code noch vorhanden istObj-C
, können Sie Folgendes verwenden:Wo:
quelle