2017-11-05 5 views
-1

Ich versuche, meine App für iPhone X Größe und habe Probleme. Derzeit definiere ich die Bildschirmgrößen wie so:Wie können Sie iPhone X Simulator programmgesteuert bestimmen?

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0) 

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width) 
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height) 
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT)) 
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT)) 

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0) 
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0) 
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0) 
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0) 

und constrain am Telefon Typ. (Ja, ich weiß, nicht optimal, aber seine was ive getan)

Wenn Sie das iPhone X-Simulator verwenden, aus irgendeinem Grund liest er seine Bildschirmhöhe und Breite wie ein iPhone 6.

Also dann Stack overflox ich gesucht und found this: How to get device make and model on iOS?

Nur Problem ist, wenn Sie auf dem iPhone X-Simulator ausführen x86-64 zurückgegeben und kein Gerätetyp!

Ich habe offensichtlich kein iPhone X, also wie erkenne ich, dass dies ein iPhone X Simulator ist und kein iPhone 6 (basierend auf der Bildschirmgröße), so kann ich richtig für dieses neue Handy einschränken!

Danke Leute!

+2

Ihr Ansatz ist definitiv nicht der Beste, Sie sollten sich nicht darum kümmern, welches Modell es ist. Aber wenn Sie Bildschirmgröße verwenden möchten, um das Modell zu bestimmen, ist das iPhone X 375 x 812 Punkte. Beachten Sie, dass Apps wie gewöhnlich in einem Emulationsmodus ausgeführt werden, wenn iOS nicht der Meinung ist, dass sie für das iPhone X aktualisiert wurden. Dazu muss das Basis-SDK auf iOS 11 und entweder ein Start-Storyboard oder ein Start-Image mit dem Recht installiert werden Größe für ein iPhone X. – jcaron

+0

Mögliche Duplikate von [Erkennen, ob das Gerät iPhone X ist] (https://stackoverflow.com/questions/46192280/detect-if-the-device-is-iphone-x) – user6788419

Antwort

0

Ich empfehle es nicht auf diese Weise, aber wenn Sie müssen, wird der folgende Code "iPhone10,3" oder "iPhone10,6" für ein iPhoneX zurückgeben.

NSString *GetHardwareName(void) 
{ 
    NSString *result = nil; 

    struct utsname platform; 
    if (uname(&platform) == 0) 
    { 
    if (platform.machine[0]) 
     result = [NSString stringWithCString:platform.machine encoding:NSUTF8StringEncoding]; 
    } 

    return result; 
} 
+0

Bereits versucht, dies . Es gibt "x86_64" auf dem iPhone X-Simulator zurück. Ich brauche einen Weg zurück, dass es ein iPhone X ist :( Gibt es eine Möglichkeit, die Sie empfehlen? –

+0

Ich brauche eine Möglichkeit, dass es ist ein iPhone X auf dem Simulator * –

+0

Werfen Sie einen Blick auf meine Antwort –

3
func modelIdentifier() -> String { 
    if let simulatorModelIdentifier = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] { return simulatorModelIdentifier } 
    var sysinfo = utsname() 
    uname(&sysinfo) // ignore return value 
    return String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters) 
} 

von here

Objective-C:

- (NSString *)modelIdentifier { 
NSString *simulatorModelIdentifier = [NSProcessInfo processInfo].environment[@"SIMULATOR_MODEL_IDENTIFIER"]; 
NSLog(@"%@",simulatorModelIdentifier); 
if (simulatorModelIdentifier) { 
    return simulatorModelIdentifier; 
} 
struct utsname sysInfo; 
uname(&sysInfo); 

return [NSString stringWithCString:sysInfo.machine encoding:NSUTF8StringEncoding]; 

}

Vergessen Sie nicht:

#import <sys/utsname.h> 

Verwendung: (In viewDidLoad zum Beispiel):

NSString *model = [self modelIdentifier]; 
NSLog(@"Device: %@", model); 

Wenn Modell iPhone10,3 ist, es ist ein iPhone X.

0

Hallo Sie unter Mikro verwenden können iPhoneX Größe zu überprüfen.

#define IS_IPHONE  (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
#define IS_IPHONE_4  (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0) 
#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_IPHONE_X  (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0) 
#define IS_RETINA  ([[UIScreen mainScreen] scale] == 2.0) 
#define IS_IPAD_DEVICE [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] 
Verwandte Themen