Как определить модель устройства по макросу? я использовал что-то подобное, но результат на симуляторе всегда 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)
Ответы:
Swift
Посмотрите это в действии https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Примечание. Если, например, iPhone 6 находится в режиме увеличения, пользовательский интерфейс представляет собой увеличенную версию iPhone 5. Эти функции определяют не тип устройства, а режим отображения, поэтому в данном примере желаемым результатом является iPhone 5.
Objective-C
Использование: http://pastie.org/9687735
Примечание. Если, например, iPhone 6 находится в режиме увеличения, пользовательский интерфейс представляет собой увеличенную версию iPhone 5. Эти функции определяют не тип устройства, а режим отображения, поэтому в данном примере желаемым результатом является iPhone 5.
источник
Для Swift:
источник
источник
IS_IPHONE_6_IOS7
иIS_IPHONE_6P_IOS7
не нужны, iPhone 6 (+) может быть только на iOS 8 и выше.источник
nativeBounds
лучше использовать чемbounds
. IPhone 6 с включенным масштабированием дисплея будет сообщать 568 для bounds.height, но 1334 для nativeBounds.height, хотя масштабирование дисплея не имеет никакого эффекта внутри приложений. ( support.apple.com/en-us/HT203073 )Я использую класс, который извлекает актуальную системную информацию. Просто убедитесь, что все типы устройств обновлены.
источник
Я могу подтвердить, что ошибка исчезнет, когда вы установите экран запуска.
Я сохранил свои изображения запуска и добавил MainStoryboard на экран запуска, и симулятор правильно распознал устройства.
источник
Лучше не связывать свой код с типами устройств. Это приведет к негибкой запутанной. Apple хочет, чтобы вы думали о размерах, а не об устройствах. В случае, если вам нужны специальные размеры для устройств больше, чем iPhone 5, такие как размеры изображений или шрифтов, я бы рекомендовал создать класс нормализации с множителем, который увеличивает ваш базовый размер на определенный процент в зависимости от соотношения между экраном iPhone 5. ширина и текущий размер устройства.
Итак, в вашем коде вы сделаете что-то вроде этого:
источник
static normalize
?Расширение UIDeivce с синтаксисом Swift 3+ .
Пример использования:
Оригинальный ответ: https://stackoverflow.com/a/36479017/3659227
источник
Обновление Xcode 11 / Swift 5.1:
Привет, я обновился до Xcode10 / Swift 4.2 и новых размеров для iPhone XS / XSMAX / XR
с обнаружением Notch-IPhones.
Надеюсь, это кому-то поможет.
}
источник
Я столкнулся с проблемой при переходе с проекта iOS 7 на проект iOS 8, поскольку я не добавил сцену экрана запуска в свой проект.
В этом случае размер экрана iPhone 6 и 6+ такой же, как у iPhone 5.
См. Документацию Apple; Вы используете запускающий XIB или файл раскадровки, чтобы указать, что ваше приложение работает на iPhone 6 Plus или iPhone 6.
источник
источник
Для плюса тоже надо проверить зум
источник
источник