Qual é o equivalente UI_USER_INTERFACE_IDIOM()
no Swift para detectar entre o iPhone e o iPad?
Eu recebo um Use of unresolved identifier
erro ao compilar no Swift.
Ao trabalhar com Swift, você pode usar o enum
UIUserInterfaceIdiom
, definido como:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Então você pode usá-lo como:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Ou com uma instrução Switch:
switch UIDevice.current.userInterfaceIdiom {
case .phone:
// It's an iPhone
case .pad:
// It's an iPad (or macOS Catalyst)
case .unspecified:
// Uh, oh! What could it be?
}
UI_USER_INTERFACE_IDIOM()
é uma macro Objective-C, definida como:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Além disso, observe que, mesmo ao trabalhar com o Objective-C, a UI_USER_INTERFACE_IDIOM()
macro é necessária apenas para o iOS 3.2 e versões inferiores. Ao implantar no iOS 3.2 e superior, você pode usar [UIDevice userInterfaceIdiom]
diretamente.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
tornaUIDevice.current.userInterfaceIdiom
Você deve usar essa estrutura GBDeviceInfo ou ...
A Apple define isso:
portanto, para a definição estrita do dispositivo, este código pode ser
Como usar
detectar a versão do iOS
Como usar
fonte
struct ScreenSize/DeviceType
abordagem uma vez que funciona em SimulatorSwift 2.0 e iOS 9 e Xcode 7.1
Swift 3.0 e Swift 4.0
Use UITraitCollection. O ambiente traço iOS está exposto que o traitCollection propriedade do protocolo UITraitEnvironment. Este protocolo é adotado pelas seguintes classes:
fonte
caso if / else:
fonte
Eu faço dessa maneira:
Mostra o nome do dispositivo.
Para verificar se é iPad ou iPhone:
fonte
Swift 2.x:
Adicionando à resposta de Beslav Turalov, a nova entrada do iPad Pro pode ser facilmente encontrada com esta linha
Swift 3 (TV e carro adicionados):
USO :
fonte
Tente adicionar uma extensão como esta:
É assim que você o usará:
EDITAR Para o simulador, você pode tentar uma solução aqui
fonte
Extensão Swift 4.2
Uso
fonte
No swift 4 & Xcode 9.2, é possível detectar se um dispositivo é iPhone / iPad das seguintes maneiras.
Outra maneira
fonte
Obrigado a todos apoio :))
UIDevice + Extensions.swift
SharedFunctions.swift
String + Whitespace.swift
fonte
Tente isso para verificar se o dispositivo atual é iPhone ou iPad:
Swift 5
Usar:
fonte
Swift 2.0 e iOS 7+ / iOS 8+ / iOS 9+
Usar :
OU
Obrigado @ user3378170
fonte
FYI, eu usei
UI_USER_INTERFACE_IDIOM()
para o meu aplicativo escrito em Swift. O aplicativo pode ser compilado bem com o XCode 6.3.1 sem nenhum aviso sobre esse comando, roda bem no Simulator (com qualquer dispositivo selecionado) e em todos os meus dispositivos reais (iPhone, iPad) com versões iOS de 7.1 a 8.3.No entanto, o aplicativo travou nos dispositivos dos revisores da Apple (e foi recusado). Demorei alguns dias para detectar o problema com mais alguns re-uploads para o iTunes Connect.
Agora eu uso
UIDevice.currentDevice().userInterfaceIdiom
e meu aplicativo pode sobreviver a essas falhas.fonte
Se você deseja verificar o dispositivo atual, seja o iPad ou o iPhone, pode usar esta linha de código:
fonte
Swift 3.0 :
fonte
Foram feitas algumas adições às respostas acima, para que você retorne um tipo em vez do valor da string.
Achei que isso seria usado principalmente para ajustes da interface do usuário, por isso não achei relevante incluir todos os submodelos, como o iPhone 5s, mas isso poderia ser facilmente estendido adicionando testes de modelo ao isDevice Array
Testado trabalhando no Swift 3.1 Xcode 8.3.2 com dispositivos físicos e simuladores
Implementação:
UIDevice.whichDevice()
Eu criei uma estrutura chamada SVNBootstaper que inclui este e alguns outros protocolos auxiliares, é público e disponível através de Cartago.
fonte
Desde o iOS 13,
UI_USER_INTERFACE_IDIOM
ele foi preterido. Se o seu código ainda estiver ativoObj-C
, você poderá usar o seguinte:Onde:
fonte