A detectar o tamanho do ecrã do iPhone 6/6+ nos valores do ponto

dado o recém-anunciado iPhone 6 tamanhos de ecrã:

iPhone 6: 1334h * 750w @2x (in points: 667h * 375w)
iPhone 6+: 1920 * 1080 @3x (in points: 640h * 360w)

estava a pensar se há algum código que me permita detectar qual é o tamanho do ecrã do dispositivo do utilizador, para que eu possa ajustar e dimensionar {[[2]} e outros materiais de acordo com o dispositivo do utilizador.

até agora, tenho usado o seguinte:

- (NSString *) platform{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithUTF8String:machine];
    free(machine);
    return platform;
}

- (NSString *) platformString{
    NSString *platform = [self platform];
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 1G";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch 1G";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch 2G";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch 3G";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch 4G";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad mini 2G (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad mini 2G (Cellular)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
}

como tal, devo assumir que iPhone7,1 e iPhone7,2 são o iPhone 6 enquanto iPhone7,3 e iPhone7.4 são os trunfos? Se alguém tem uma maneira mais concreta de dizer isso ... porta-te bem, obrigado.!

Author: daspianist, 2014-09-10

16 answers

O primeiro ecrã será o ecrã do dispositivo, lembre-se que as imagens de lançamento para os novos telemóveis têm de ser adicionadas antes, caso contrário o aplicativo está a correr no modo Zoomed para aplicações mais antigas : Aqui está o código que usei para verificar isto. Nota: Isto só funciona com a versão iOS 8 ou superior:

UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
          NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

Código para detectar iPhone 6 Mais:

#define IS_PAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_PHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

-(BOOL)iPhone6PlusDevice{
    if (!IS_PHONE) return NO;
    if ([UIScreen mainScreen].scale > 2.9) return YES;   // Scale is only 3 when not in scaled mode for iPhone 6 Plus
    return NO;
}

Ou

-(BOOL) iPhone6PlusUnZoomed{
    if ([self iPhone6PlusDevice]){
        if ([UIScreen mainScreen].bounds.size.height > 720.0) return YES;  // Height is 736, but 667 when zoomed.
    }
    return NO;
}

Nota: Se estiver a verificar o iPhone 6 Plus, para ajustar a interface do utilizador, então não confie em .nativeScale, porque o simulador e o dispositivo real dão resultados diferentes. Devido ao comentário abaixo. Escala é um CGFloat e, portanto, o código não deve verificar a igualdade, porque alguns valores flutuantes podem nunca ser iguais.


Depois de adicionar O ecrã de lançamento pode utilizar os novos tamanhos de iPhone, caso contrário, o seu aplicativo ainda parecerá escalado.

Actualizado para os novos iPhones X, X e X Max

Tamanho para iPhone X Max com @3x escala (nome da maçã: Super Retina HD 6.5 apresentar"), espaço de coordenadas: 414 x 896 pontos e 1242 x 2688 pixels, 458 ppi, dispositivo de tamanho físico é a 3,05 x 6.20 ou 77.4 x 157.5 mm.

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X Max Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 1242.0, 2688.0), scale: 3.0

Tamanho para iPhone X com @2x escala (Apple nome: Super Retina HD de 6.1", ecrã), espaço de coordenadas: 414 x 896 pontos e 828 x 1792 pixels, 326 ppi, dispositivo do tamanho físico é de 2,98 x 5.94 em ou 75,7 x de 150,9 mm.

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X Screen bounds: (0.0, 0.0, 414.0, 896.0), Screen resolution: (0.0, 0.0, 828.0, 1792.0), scale: 2.0

Tamanho para iPhone X e iPhone X com @3x escala (Apple nome: Super Retina HD de 5,8" exibir), espaço de coordenadas: 375 x 812 pontos e 1125 x 2436 pixels, 458 ppi, dispositivo do tamanho físico é 2.79 x 5.65 ou de 70,9 x 143.6 mm.

let screen = UIScreen.main
print("Screen bounds: \(screen.bounds), Screen resolution: \(screen.nativeBounds), scale: \(screen.scale)")
//iPhone X and X Screen bounds: (0.0, 0.0, 375.0, 812.0), Screen resolution: (0.0, 0.0, 1125.0, 2436.0), scale: 3.0

Tamanho para iPhone 8, 7, 6 Plus e iPhone 8, 7, 6S Plus com escala @3x (nome da maçã: Retina HD 5.5 ), espaço de coordenadas: 414 x 736 pontos e 1242 x 2208 pixels, 401 ppi, o tamanho físico do ecrã é de 2, 7 x 4, 8 in ou 68 x 122 mm:

Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}}; 
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000

Tamanho para iPhone 6 e iPhone 6S com @2x de escala (Apple nome: Retina HD de 4,7), espaço de Coordenadas: 375 x 667 pontos e 750 x 1334 pixels, 326 ppi, tela tamanho físico é de 2,3 x 4.1 ou 58 x 104 mm:

Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}}; 
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000

E iPhone 5 para comparação é 640 x 1136, iPhone 4 640 x 960.

Nota: enviar as plataformas de lançamento caso contrário, a aplicação irá correr dimensionada e não irá mostrar a escala correcta, nem os tamanhos do ecrã.

Comparing iPhone 6 and 6 Plus

 99
Author: Hannes Sverrisson, 2018-09-18 22:35:15

Se você preferir macros aqui são os únicos, que você pode usar para diferenciar entre os modelos de iPhone. Estes valores baseiam-se nos valores dos pontos.

#define IS_IPHONE_4 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)480) < DBL_EPSILON)
#define IS_IPHONE_5 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)568) < DBL_EPSILON)
#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)
 32
Author: bkhayll, 2014-09-28 09:29:28

Uso o seguinte código para determinar que dispositivo está a correr (é um pouco rápido e sujo, mas faz o truque)

if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ){

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
    if( screenHeight < screenWidth ){
        screenHeight = screenWidth;
    }

    if( screenHeight > 480 && screenHeight < 667 ){
        NSLog(@"iPhone 5/5s");
    } else if ( screenHeight > 480 && screenHeight < 736 ){
        NSLog(@"iPhone 6");
    } else if ( screenHeight > 480 ){
        NSLog(@"iPhone 6 Plus");
    } else {
        NSLog(@"iPhone 4/4s");
    }
}

(Isto só funciona quando o iPhone 6 / 6 Plus está activo, adicionando os ecrãs de visualização apropriados)

 17
Author: Roland Keesom, 2014-11-11 08:36:59
No dispositivo físico, os limites do ecrã principal do iPhone 6 Plus são 2208x1242 e o nativeBounds é 1920x1080. Há escala de hardware envolvida para dimensionar para o display físico. No simulador, os limites da tela principal do iPhone 6 Plus e nativeBounds são ambos 2208x1242. Por outras palavras... Vídeos, OpenGL e outras coisas baseadas em CALayers que lidam com pixels irão lidar com o real 1920x1080 framebuffer no dispositivo (ou 2208x1242 no sim). Coisas com que lidar pontos em UIKit será lidar com os limites 2208x1242 (x3) e ser escalado como apropriado no dispositivo.

O simulador não tem acesso ao mesmo hardware que está a fazer o dimensionamento do dispositivo e não há grande benefício em simulá-lo em software, uma vez que produziriam resultados diferentes do hardware. Assim, faz sentido definir os nativeBounds da tela principal de um dispositivo simulado para os limites da tela principal do dispositivo físico.

IOS 8 adicionou API à UIScreen (escala nativ e nativeBounds) para permitir que um desenvolvedor determine a resolução do CADisplay correspondente à UIScreen.

 5
Author: Jeremy Huddleston Sequoia, 2014-09-10 06:57:07

Verifique a lista atualizada emwiki , lá eu tenho 7,2 para iPhone 6 e 7,1 para iPhone 6 plus.

 5
Author: user3344236, 2014-09-15 07:01:37

Você pode detectar iPhone 6 Plus com base na sua escala nativa, usando esta macro:

#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
 4
Author: sweepy_, 2014-09-10 16:29:02
A resposta de Hannes Sverrisson está quase correcta. O sistema de coordenadas iPhone 6 é de fato maior do que os 5s usando seu código:
UIScreen *mainScreen = [UIScreen mainScreen];
NSLog(@"Screen bounds: %@, Screen resolution: %@, scale: %f, nativeScale: %f",
      NSStringFromCGRect(mainScreen.bounds), mainScreen.coordinateSpace, mainScreen.scale, mainScreen.nativeScale);

O sistema de Coordenadas para aplicações que fornecem as imagens de lançamento correctas são:

Tamanho do iPhone 6 (Retina HD 4.7) com escala @2x, espaço de coordenadas: 375 x 667 e 750 x 1334 pontos reais:

Screen bounds: {{0, 0}, {375, 667}}, Screen resolution: <UIScreen: 0x7fa01b5182d0; bounds = {{0, 0}, {375, 667}}; 
mode = <UIScreenMode: 0x7fa01b711760; size = 750.000000 x 1334.000000>>, scale: 2.000000, nativeScale: 2.000000

Tamanho do iPhone 6 Mais (Retina HD 5.5) com escala @3x, espaço de coordenadas: 414 x 736 e 1242 x 2208 pontos reais:

Screen bounds: {{0, 0}, {414, 736}}, Screen resolution: <UIScreen: 0x7f97fad330b0; bounds = {{0, 0}, {414, 736}}; 
mode = <UIScreenMode: 0x7f97fae1ce00; size = 1242.000000 x 2208.000000>>, scale: 3.000000, nativeScale: 3.000000
 4
Author: Paul Buchanan, 2014-09-10 22:21:22

Isto é o que eu uso no meu aplicativo com iOS 8:

window=[[[UIApplication sharedApplication] windows] firstObject];

NSLog(@"screenHeight=%f width=%f",window.frame.size.height,window.frame.size.width);

if (window.frame.size.height == 480) {

        do stuff here... 
    }

Antes do Xcode6 / iOS 8, eu usei isto, mas os limites do ecrã não funcionam correctamente com o simulador dimensionável ou pelo menos não funcionou no xcode6 betas...

CGRect screenBounds=[[UIScreen mainScreen] bounds];

if (screenBounds.size.height >= 568) {

do stuff here...

}
 3
Author: David L, 2014-09-10 01:50:02
Tive de detectar o iPhone 6 Mais numa aplicação construída com o iOS 7. Como a escala nativ não está disponível em [tela principal UIScreen] eu tentei usar [escala de tela principal UIScreen] mas isso acabou de retornar 2. 0. Então eu vim com esta solução para detectar o iPhone 6 mais em iOS 7 (deve também trabalhar em iOS 8):
-(BOOL)iPhone6Plus{
BOOL isiPhone6Plus = NO;
SEL selector = NSSelectorFromString(@"scale");
if ([[UIScreen mainScreen] respondsToSelector:selector]) {
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                                [[[UIScreen mainScreen] class] instanceMethodSignatureForSelector:selector]];
    [invocation setSelector:selector];
    [invocation setTarget:[UIScreen mainScreen]];
    [invocation invoke];
    float returnValue;
    [invocation getReturnValue:&returnValue];
    if (returnValue == 3.0) {
        isiPhone6Plus = YES;
    }
    NSLog(@"ScaleFactor %1.2f", returnValue);
}
return isiPhone6Plus;

}

A parte interessante deste código é que, se eu usar o NSInvocation, o valor de retorno do selector de escala será 3.0. Invocar este método directamente nos retornos do iOS 7 2.0.

 3
Author: Sven, 2014-09-24 06:48:12

Todos os três dispositivos têm (praticamente) o mesmo número de pontos por polegada. Então suas imagens serão automaticamente do mesmo tamanho físico.

Usar [[UIScreen mainScreen] bounds] para obter o número total de pontos no ecrã. Dividir por 163 para obter o tamanho aproximado em polegadas, se você realmente quiser.

Repare que o 6+ não devolve 1080p porque não corresponde a um buffer 1080p. Ele torna tal que a saída é de aproximadamente 160 pontos por polegada, usando ativos @3x.

Não é necessário um segundo palpite.

Por exemplo, se escrever este código:

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 163, 163)];
view.backgroundColor = [UIColor redColor];
[self.view addSubview:view];
Vais ter uma vista que é praticamente do mesmo tamanho físico - um centímetro quadrado-em todos os dispositivos iOS. A Apple já fez o trabalho duro, por isso não tens de o fazer.
 2
Author: Tommy, 2014-09-10 01:50:04
Para mim, isto funciona para mim.
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
    UIStoryboard *storyBoard;

    CGSize result = [[UIScreen mainScreen] bounds].size;
    CGFloat scale = [UIScreen mainScreen].scale;
    result = CGSizeMake(result.width * scale, result.height * scale);

    if(result.height == 1136){
        storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone_5" bundle:nil];
        UIViewController *initViewController = [storyBoard instantiateInitialViewController];
        [self.window setRootViewController:initViewController];

    } else if(result.height == 1334){
        storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone_6" bundle:nil];
        UIViewController *initViewController = [storyBoard instantiateInitialViewController];
        [self.window setRootViewController:initViewController];

    } else if(result.height == 2208){
        storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone_6_plus" bundle:nil];
        UIViewController *initViewController = [storyBoard instantiateInitialViewController];
        [self.window setRootViewController:initViewController];

    } else if(result.height == 960){
        storyBoard = [UIStoryboard storyboardWithName:@"Main_iPhone_4" bundle:nil];
        UIViewController *initViewController = [storyBoard instantiateInitialViewController];
        [self.window setRootViewController:initViewController];

    }

} else {

    UIStoryboard *storyBoard;

    storyBoard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
    UIViewController *initViewController = [storyBoard instantiateInitialViewController];
    [self.window setRootViewController:initViewController];

}
 2
Author: oscar castellon, 2014-10-17 20:14:01

Isto é garantido para compilar no xcode 5 (xocde 6 Neste ponto ainda é flaky, e você não pode enviar um ipa para a itunes connect para aprovação de app store usando software beta, que xcode 6 é agora)

O problema é que o xcode 5 não reconhece o selector nativeScale.. é assim que se pode fazê-lo em tempo de execução:

+ (BOOL)isIphone6Plus
{
    SEL selector = NSSelectorFromString(@"nativeScale");
    if ([[UIScreen mainScreen] respondsToSelector:selector]) {
            NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                                        [[[UIScreen mainScreen] class] instanceMethodSignatureForSelector:selector]];
            [invocation setSelector:selector];
            [invocation setTarget:[UIScreen mainScreen]];
            [invocation invoke];
            float returnValue;
            [invocation getReturnValue:&returnValue];
            NSLog(@"::: this is native scale %f", returnValue);
            return (returnValue == 3.0f);
    } else {
        // iphone 6 plus come prepackaged with iOS8.. 
        // so if the phone doesn't know what nativeScale means
        // it's not an iphone6plus phone
        return NO;
    }
}
 1
Author: abbood, 2014-10-15 07:35:06

Uma coisa interessante de se lembrar quando se lê os tamanhos de ecrã no meu iPhone 6 Plus foi que quando se tiver configurado para o modo " Zoomed "irá aparecer como uma altura do iPhone 6 (667) e quando se tiver configurado como" Standard " irá aparecer como (736). Não deveria realmente importar, mas se você especificamente queria saber o tipo de dispositivo por alguma razão ( talvez reportando ), isso poderia enganá-lo.

Veristo .

 1
Author: Shippy, 2016-09-20 08:37:40

Aqui está o código fonte actualizado que está a usar este .

IPhone 6 e iPhone 6 Mais modelos foram adicionados.

 1
Author: Sergey Filippov, 2016-09-20 08:38:29

Uma coisa importante que as respostas acima estão deixando de fora é o fato de que em iOS7 e abaixo, quando você verifica {[[2]} para os limites da tela, ele sempre lista a largura e a altura como a mesma, não importa qual a orientação do telefone está dentro. Então, se é um iPhone5 no modo paisagem, ele ainda vai listar a largura como 320 e altura como 568. Em iOS8, isso mudou, agora se esse mesmo iPhone5 está na paisagem, ele vai listar a largura como 568 e a altura como 320. Abaixo estão os métodos que explicam isto:

+ (BOOL) deviceHasFourInchScreen
{
    return [DeviceType deviceHasScreenWithIdiom:UIUserInterfaceIdiomPhone scale:2.0 height:568.0];
}

+ (BOOL) deviceHasFourPointSevenInchScreen
{
    return [DeviceType deviceHasScreenWithIdiom:UIUserInterfaceIdiomPhone scale:2.0 height:667.0];
}

+ (BOOL) deviceHasFivePointFiveInchScreen
{
    return [DeviceType deviceHasScreenWithIdiom:UIUserInterfaceIdiomPhone scale:3.0 height:736.0];
}

+ (BOOL) deviceHasScreenWithIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom scale:(CGFloat)scale height:(CGFloat)height
{
    CGRect mainScreenBounds = [[UIScreen mainScreen] bounds];
    CGFloat mainScreenHeight;

    if ([OperatingSystemVersion operatingSystemVersionLessThan:@"8.0"])
    {
        mainScreenHeight = mainScreenBounds.size.height;
    }
    else
    {
        mainScreenHeight = (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) ? mainScreenBounds.size.width : mainScreenBounds.size.height;
    }

    if ([[UIDevice currentDevice] userInterfaceIdiom] == userInterfaceIdiom && [[UIScreen mainScreen] scale] == scale && mainScreenHeight == height)
    {
        return YES;
    }
    else
    {
        return NO;
    }
}

Também aqui estão os métodos de classe do sistema operativo que o acompanham:

+ (NSString *) currentOperatingSystemVersion
{
    return [[UIDevice currentDevice] systemVersion];
}
+ (BOOL) operatingSystemVersionLessThanOrEqualTo:(NSString *) operatingSystemVersionToCompare
{
    return ([[self currentOperatingSystemVersion] compare: operatingSystemVersionToCompare options:NSNumericSearch] != NSOrderedDescending);    
}
 0
Author: Ser Pounce, 2014-09-27 22:17:01

Swift 4

if(kSize.width == 320){
             //iphone se
}else if(kSize.width == 375 && kSize.height == 667){
             //iphone 7 / 8
}else if(kSize.width == 375){
            //iphone x
}else if(kSize.width == 414){
           //iphone 7 plus/ 8 plus
}

KSize is screen CGSize

Deixe kSize = UIScreen.principal.fronteira.Tamanho
 0
Author: Kishore Kumar, 2018-07-10 11:50:54