Ich habe eine App, die auf dem iPhone und iPod Touch ausgeführt werden kann. Sie kann auf dem Retina iPad und alles laufen, aber es muss eine Anpassung vorgenommen werden. Ich muss feststellen, ob das aktuelle Gerät ein iPad ist. Mit welchem Code kann ich erkennen, ob der Benutzer ein iPad in meiner UIViewController
verwendet, und dann etwas ändern?
Es gibt mehrere Möglichkeiten, um zu überprüfen, ob ein Gerät ein iPad ist. Dies ist meine Lieblingsmethode, um zu überprüfen, ob das Gerät tatsächlich ein iPad ist:
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
return YES; /* Device is iPad */
}
#define IDIOM UI_USER_INTERFACE_IDIOM()
#define IPAD UIUserInterfaceIdiomPad
if ( IDIOM == IPAD ) {
/* do something specifically for iPad. */
} else {
/* do something specifically for iPhone or iPod touch. */
}
if ( [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] ) {
return YES; /* Device is iPad */
}
#define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
if ( IPAD )
return YES;
Eine schnelle Lösung finden Sie in dieser Antwort: https://stackoverflow.com/a/27517536/2057171
In Swift können Sie die folgenden Gleichungen verwenden, um die Art der Gerätein Universal-Apps zu bestimmen:
UIDevice.current.userInterfaceIdiom == .phone
// or
UIDevice.current.userInterfaceIdiom == .pad
Usage wäre dann so etwas wie:
if UIDevice.current.userInterfaceIdiom == .pad {
// Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified
// Implement your logic here
}
Dies ist Teil von UIDevice ab iOS 3.2, z.
[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
Sie können dies auch verwenden
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
// iPad
} else {
// iPhone / iPod Touch
}
UI_USER_INTERFACE_IDIOM () gibt das iPad nur zurück, wenn die App für iPad oder Universal ist. Wenn eine iPhone-App auf einem iPad ausgeführt wird, ist dies nicht der Fall. Sie sollten also stattdessen das Modell überprüfen.
Seien Sie vorsichtig: Wenn Ihre App nur auf iPhone-Geräte abzielt, wird das iPad, das im iphone-kompatiblen Modus ausgeführt wird, für folgende Aussage falsch zurückgegeben:
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
Der richtige Weg, physische iPad-Geräte zu erkennen, ist:
#define IS_IPAD_DEVICE ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
Ich habe festgestellt, dass eine Lösung für mich im Simulator in Xcode nicht funktioniert hat. Stattdessen funktioniert das:
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) {
DebugLog(@"iPad");
} else {
DebugLog(@"iPhone or iPod Touch");
}
if UIDevice.current.model.hasPrefix("iPad") {
print("iPad")
} else {
print("iPhone or iPod Touch")
}
Auch in den "Other Examples" in Xcode kommt das Gerätemodell als "iPad Simulator" zurück, daher sollte der obige Tweak das Problem lösen.
Viele Möglichkeiten, dies in Swift zu tun:
Wir überprüfen das Modell unten (wir können hier nur eine Suche nach Groß- und Kleinschreibung durchführen):
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let result: Bool = NSString(string: deviceModel).containsString("iPad")
return result
}
Wir überprüfen das Modell unten (wir können hier eine Suche nach Groß- und Kleinschreibung durchführen):
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let deviceModelNumberOfCharacters: Int = count(deviceModel)
if deviceModel.rangeOfString("iPad",
options: NSStringCompareOptions.LiteralSearch,
range: Range<String.Index>(start: deviceModel.startIndex,
end: advance(deviceModel.startIndex, deviceModelNumberOfCharacters)),
locale: nil) != nil {
return true
} else {
return false
}
}
UIDevice.currentDevice().userInterfaceIdiom
unten gibt das iPad nur zurück, wenn die App für iPad oder Universal ist. Wenn es sich um eine iPhone-App handelt, die auf einem iPad ausgeführt wird, ist dies nicht der Fall. Sie sollten also stattdessen das Modell überprüfen. :
class func isUserUsingAnIpad() -> Bool {
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
return true
} else {
return false
}
}
Dieses folgende Snippet wird nicht kompiliert, wenn die Klasse keine UIViewController
erbt, andernfalls funktioniert es einwandfrei. Egal ob UI_USER_INTERFACE_IDIOM()
das iPad nur zurückgibt, wenn die App für iPad oder Universal ist. Wenn es sich um eine iPhone-App handelt, die auf einem iPad ausgeführt wird, ist dies nicht der Fall. Sie sollten also stattdessen das Modell überprüfen. :
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
*
In Swift 3.0
*
if UIDevice.current.userInterfaceIdiom == .pad {
//pad
} else if UIDevice.current.userInterfaceIdiom == .phone {
//phone
} else if UIDevice.current.userInterfaceIdiom == .tv {
//tv
} else if UIDevice.current.userInterfaceIdiom == .carPlay {
//CarDisplay
} else {
//unspecified
}
Sie können den RangeOfString überprüfen, um zu sehen, ob das Word iPad so vorhanden ist.
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound) {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}
Viele Antworten sind gut, aber ich verwende das so in Swift 4
Konstante erstellen
struct App {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
Verwenden Sie so
if App.isRunningOnIpad {
return load(from: .main, identifier: identifier)
} else {
return load(from: .ipad, identifier: identifier)
}
Editieren: Wie vorgeschlagen, erstellen Sie einfach eine Erweiterung auf UIDevice
extension UIDevice {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
Noch ein schneller Weg:
//MARK: - Device Check
let iPad = UIUserInterfaceIdiom.Pad
let iPhone = UIUserInterfaceIdiom.Phone
@available(iOS 9.0, *) /* AppleTV check is iOS9+ */
let TV = UIUserInterfaceIdiom.TV
extension UIDevice {
static var type: UIUserInterfaceIdiom
{ return UIDevice.currentDevice().userInterfaceIdiom }
}
Verwendungszweck:
if UIDevice.type == iPhone {
//it's an iPhone!
}
if UIDevice.type == iPad {
//it's an iPad!
}
if UIDevice.type == TV {
//it's an TV!
}
Warum so kompliziert? So mache ich es ...
Swift 4:
var iPad : Bool {
return UIDevice.current.model.contains("iPad")
}
Auf diese Weise können Sie einfach if iPad {}
sagen
In Swift 4.2 und Xcode 10
if UIDevice().userInterfaceIdiom == .phone {
//This is iPhone
} else if UIDevice().userInterfaceIdiom == .pad {
//This is iPad
} else if UIDevice().userInterfaceIdiom == .tv {
//This is Apple TV
}
Wenn Sie ein bestimmtes Gerät erkennen möchten
let screenHeight = UIScreen.main.bounds.size.height
if UIDevice().userInterfaceIdiom == .phone {
if (screenHeight >= 667) {
print("iPhone 6 and later")
} else if (screenHeight == 568) {
print("SE, 5C, 5S")
} else if(screenHeight<=480){
print("4S")
}
} else if UIDevice().userInterfaceIdiom == .pad {
//This is iPad
}
Für die neuesten Versionen von iOS fügen Sie einfach UITraitCollection
hinzu:
extension UITraitCollection {
var isIpad: Bool {
return horizontalSizeClass == .regular && verticalSizeClass == .regular
}
}
und dann in UIViewController
einfach nachsehen:
if traitCollection.isIpad { ... }
if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
{
print("This is iPad")
}else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
{
print("This is iPhone");
}