Что эквивалентно UI_USER_INTERFACE_IDIOM()
в Swift для обнаружения между iPhone и iPad?
Я получаю Use of unresolved identifier
ошибку при компиляции в Swift.
При работе со Swift вы можете использовать enum
UIUserInterfaceIdiom
, определяемый как:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
Таким образом, вы можете использовать его как:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
Или с оператором 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()
макрос Objective-C, который определяется как:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
Также обратите внимание, что даже при работе с Objective-C UI_USER_INTERFACE_IDIOM()
макрос требуется только при таргетинге на iOS 3.2 и ниже. При развертывании на iOS 3.2 и выше, вы можете использовать [UIDevice userInterfaceIdiom]
напрямую.
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
UIDevice.currentDevice().userInterfaceIdiom
становитсяUIDevice.current.userInterfaceIdiom
Вы должны использовать эту GBDeviceInfo рамки или ...
Apple определяет это:
поэтому для строгого определения устройства может быть использован этот код
как пользоваться
определить версию iOS
как пользоваться
источник
struct ScreenSize/DeviceType
подход, так как он работает в симулятореSwift 2.0 и iOS 9 и Xcode 7.1
Swift 3.0 и Swift 4.0
Используйте UITraitCollection. Среда черты iOS открывается через свойство traitCollection протокола UITraitEnvironment. Этот протокол принят следующими классами:
источник
if / else case:
источник
Я делаю так:
Показывает название устройства.
Чтобы проверить, есть ли iPad или iPhone:
источник
Swift 2.x:
Добавив к Беславу Туралову ответ, новую запись iPad Pro можно легко найти с помощью этой строки
Swift 3 (телевизор и машина добавлены):
ИСПОЛЬЗОВАНИЕ :
источник
Попробуйте добавить расширение как это:
Вот как вы будете использовать это:
РЕДАКТИРОВАТЬ Для симулятора, вы можете попробовать решение здесь
источник
Расширение Swift 4.2
использование
источник
В swift 4 & Xcode 9.2 вы можете определить, является ли устройство iPhone / iPad, следующими способами.
По-другому
источник
Спасибо всем, кто поддерживает :))
UIDevice + Extensions.swift
SharedFunctions.swift
Строка + Whitespace.swift
источник
Попробуйте это, чтобы проверить текущее устройство iPhone или iPad:
Swift 5
Использование:
источник
Swift 2.0 и iOS 7+ / iOS 8+ / iOS 9+
Используйте:
ИЛИ
Спасибо @ user3378170
источник
К вашему сведению, я использовал
UI_USER_INTERFACE_IDIOM()
для своего приложения, написанного на Swift. Приложение может быть хорошо скомпилировано с XCode 6.3.1 без каких-либо предупреждений об этой команде, хорошо работает на Simulator (с любыми выбранными устройствами) и на всех моих реальных устройствах (iPhone, iPad) с версиями iOS от 7.1 до 8.3.Тем не менее, приложение упало на устройствах обозревателей Apple (и было отказано). Мне потребовалось несколько дней, чтобы обнаружить проблему с помощью нескольких повторных загрузок в iTunes Connect.
Теперь я использую
UIDevice.currentDevice().userInterfaceIdiom
вместо этого, и мое приложение может выжить от таких сбоев.источник
Если вы хотите проверить текущее устройство, будь то iPad или iPhone, вы можете использовать следующие строки кода:
источник
Swift 3.0 :
источник
Сделал пару дополнений к приведенным выше ответам, чтобы вы возвращали тип вместо строкового значения.
Я подумал, что это в первую очередь будет использоваться для настройки пользовательского интерфейса, поэтому я не считаю уместным включать все подмодели, например iPhone 5s, но это можно легко расширить, добавив тесты моделей в массив isDevice.
Проверена работа в Swift 3.1 Xcode 8.3.2 с физическими и симуляторными устройствами
Реализация:
UIDevice.whichDevice()
Я создал фреймворк под названием SVNBootstaper, который включает в себя этот и некоторые другие вспомогательные протоколы, он общедоступен и доступен через Carthage.
источник
Начиная с iOS 13,
UI_USER_INTERFACE_IDIOM
устарела. Если ваш код все еще вObj-C
, вы можете использовать следующее:Куда:
источник