Como detectar o modelo do dispositivo por macro? Eu usei algo assim, mas o resultado no simulador sempre IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#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_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Respostas:
Rápido
Veja-o em ação https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Nota: Se, por exemplo, o iPhone 6 estiver no modo ampliado, a IU é uma versão ampliada do iPhone 5. Essas funções não determinam o tipo de dispositivo, mas o modo de exibição, portanto, o iPhone 5 é o resultado desejado neste exemplo.
Objective-C
Uso: http://pastie.org/9687735
Nota: Se, por exemplo, o iPhone 6 estiver no modo ampliado, a IU é uma versão ampliada do iPhone 5. Essas funções não determinam o tipo de dispositivo, mas o modo de exibição, portanto, o iPhone 5 é o resultado desejado neste exemplo.
fonte
Para Swift:
fonte
fonte
IS_IPHONE_6_IOS7
eIS_IPHONE_6P_IOS7
não são necessários, o iPhone 6 (+) só pode estar no iOS 8 e superior.fonte
nativeBounds
é melhor usar do quebounds
. Um iPhone 6 com Display Zoom ativado reportará 568 para bounds.height, mas 1334 para nativeBounds.height, embora Display Zoom não tenha nenhum efeito dentro dos aplicativos. ( support.apple.com/en-us/HT203073 )Eu uso uma classe que extrai informações reais do sistema. Só preciso ter certeza de que todos os tipos de dispositivos estão atualizados.
fonte
Posso confirmar que o bug desaparece quando você define uma tela de inicialização.
Eu mantive minhas imagens de inicialização e adicionei MainStoryboard à tela de inicialização e o simulador reconheceu os dispositivos corretamente.
fonte
É melhor não vincular seu código a tipos de dispositivos. Isso levará a um complicado e inflexível. A Apple quer que você pense em tamanhos, não em dispositivos. Caso você precise ter tamanhos especiais para dispositivos maiores que o iPhone 5, como tamanho de imagem ou fonte, eu recomendaria criar uma classe de normalização com um multiplicador que aumenta seu tamanho base em uma certa porcentagem com base na relação entre a tela do iPhone 5 largura e o tamanho atual do dispositivo.
Portanto, em seu código, você fará algo assim:
fonte
static normalize
?Extensão UIDeivce com sintaxe Swift 3+ .
Uso de amostra:
Resposta original: https://stackoverflow.com/a/36479017/3659227
fonte
Atualize o Xcode 11 / Swift 5.1:
Oi, eu atualizei para Xcode10 / Swift 4.2 e os novos tamanhos para IPhone XS / XSMAX / XR
com detecção de Notch-IPhones.
Espero que isso ajude alguém.
}
fonte
Eu encontrei o problema ao migrar de um projeto iOS 7 para um projeto iOS 8, pois não adicionei uma cena de tela de inicialização ao meu projeto.
Nesse caso, o tamanho da tela do iPhone 6 e 6+ é igual ao do iPhone 5.
Consulte a documentação da apple; Você usa um arquivo XIB de inicialização ou storyboard para indicar que seu aplicativo é executado no iPhone 6 Plus ou iPhone 6.
fonte
fonte
Além disso, você deve verificar o zoom também
fonte
fonte