¿Cuál es el equivalente de UI_USER_INTERFACE_IDIOM()
en Swift para detectar entre iPhone y iPad?
Me sale un Use of unresolved identifier
error al compilar en Swift.
Cuando trabaje con Swift, puede usar el 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)
}
Entonces puedes usarlo como:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
O con una declaración 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()
es una macro de Objective-C, que se define como:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Además, tenga en cuenta que incluso cuando trabaja con Objective-C, la UI_USER_INTERFACE_IDIOM()
macro solo es necesaria cuando se dirige a iOS 3.2 y versiones inferiores. Al implementar a iOS 3.2 y superior, puede usar [UIDevice userInterfaceIdiom]
directamente.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
se convierteUIDevice.current.userInterfaceIdiom
Debe usar este marco GBDeviceInfo o ...
Apple define esto:
para la definición estricta del dispositivo se puede usar este código
cómo utilizar
para detectar la versión de iOS
cómo utilizar
fuente
struct ScreenSize/DeviceType
enfoque ya que funciona en SimulatorSwift 2.0 y iOS 9 y Xcode 7.1
Swift 3.0 y Swift 4.0
Utilice UITraitCollection. El entorno rasgo IOS se expone a pesar de la traitCollection propiedad del protocolo UITraitEnvironment. Este protocolo es adoptado por las siguientes clases:
fuente
caso si / si no:
fuente
Yo hago de esa manera:
Muestra el nombre del dispositivo.
Para verificar si es iPad o iPhone:
fuente
Swift 2.x:
Agregando a Beslav Turalov las respuestas, la nueva entrada iPad Pro se puede encontrar fácilmente con esta línea
Swift 3 (TV y auto añadidos):
USO :
fuente
Intenta agregar una extensión como esta:
Así es como lo usarás:
EDITAR Para simulador, puede probar una solución aquí
fuente
Extensión Swift 4.2
Uso
fuente
En swift 4 y Xcode 9.2, puede detectar si un dispositivo es iPhone / iPad de las siguientes maneras.
De otra manera
fuente
Gracias a todos por el apoyo :))
UIDevice + Extensions.swift
SharedFunctions.swift
String + Whitespace.swift
fuente
Pruebe esto para verificar que el dispositivo actual sea iPhone o iPad:
Swift 5
Utilizar:
fuente
Swift 2.0 y iOS 7+ / iOS 8+ / iOS 9+
Utilizar :
O
Gracias @ user3378170
fuente
FYI, he usado
UI_USER_INTERFACE_IDIOM()
para mi aplicación escrita en Swift. La aplicación se puede compilar bien con XCode 6.3.1 sin ninguna advertencia sobre ese comando, funciona bien en Simulator (con cualquier dispositivo seleccionado) y en todos mis dispositivos reales (iPhone, iPad) con versiones de iOS de 7.1 a 8.3.Sin embargo, la aplicación se bloqueó en los dispositivos de los revisores de Apple (y fue rechazada). Eso me llevó unos días detectar el problema con algunas recargas más a iTunes Connect.
Ahora uso
UIDevice.currentDevice().userInterfaceIdiom
en su lugar y mi aplicación puede sobrevivir a tales bloqueos.fuente
Si desea verificar si el dispositivo actual es iPad o iPhone, puede usar esta línea de código:
fuente
Swift 3.0 :
fuente
Hizo un par de adiciones a las respuestas anteriores para que se devuelva un tipo en lugar del valor de cadena.
Pensé que esto se usaría principalmente para los ajustes de la interfaz de usuario, por lo que no me pareció relevante incluir todos los submodelos, es decir, iPhone 5s, pero esto podría extenderse fácilmente agregando pruebas de modelo a la matriz de dispositivos.
Probado trabajando en Swift 3.1 Xcode 8.3.2 con dispositivos físicos y simuladores
Implementación:
UIDevice.whichDevice()
He creado un marco llamado SVNBootstaper que incluye este y algunos otros protocolos auxiliares, es público y está disponible a través de Carthage.
fuente
Desde iOS 13,
UI_USER_INTERFACE_IDIOM
ha quedado en desuso. Si su código aún está en usoObj-C
, puede usar lo siguiente:Dónde:
fuente