wake-up-neo.com

iOS erkennt, ob sich der Benutzer auf einem iPad befindet

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?

219
Albert Renshaw

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 */
}

So wie ich es benutze

#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. */
}   

Andere Beispiele

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

554
WrightsCS

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
}
127
Dschee

Dies ist Teil von UIDevice ab iOS 3.2, z.

[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
33
Richard

Sie können dies auch verwenden

#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
   // iPad
} else {
   // iPhone / iPod Touch
}
25
Chilly

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.

19
malhal

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"])
14
peak

Ich habe festgestellt, dass eine Lösung für mich im Simulator in Xcode nicht funktioniert hat. Stattdessen funktioniert das:

ObjC

NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;

if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) {
    DebugLog(@"iPad");
} else {
    DebugLog(@"iPhone or iPod Touch");
}

Schnell

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.

11
Andy Davies

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
    }
}
8
King-Wizard

*

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
    }
7
Ashok R

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");
}
3
LearningGuy

Viele Antworten sind gut, aber ich verwende das so in Swift 4

  1. Konstante erstellen

    struct App {
        static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
    }
    
  2. 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

}

3
Rohit Sisodia

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!
}
2
Aviel Gross

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

1
The Ruffus

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
}
0
iOS

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");
  }
0
Rajesh Sharma