Шрифт Roboto не работает на iPhone XR в iOS 13 - PullRequest
0 голосов
/ 13 января 2020

Я новичок в swift. Я пытаюсь использовать шрифт Roboto. Шрифт Roboto работает в iPhone 6s, но не работает в iPhone XR. Мой код выглядит так:

    #ifndef DICE_PrefixHeader_pch
    #define DICE_PrefixHeader_pch  

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0)
    #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_IPHONE_X (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 812.0)
    #define IS_IPHONE_XR (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 1792.0)

    GenralMethod.h

    +(UIFont*)setFont:(NSString*)fontName ForiPhone6Plus:(CGFloat)iPhone6Plus iPhone6:(CGFloat)iPhone6 iPhoneXR:(CGFloat)iPhoneXR andiPhone:(CGFloat)iPhone;

    GenralMethod.m

    +(UIFont*)setFont:(NSString*)fontName ForiPhone6Plus:(CGFloat)iPhone6Plus iPhone6:(CGFloat)iPhone6 iPhoneXR:(CGFloat)iPhoneXR andiPhone:(CGFloat)iPhone
    {
        return [UIFont fontWithName:fontName size:IS_IPHONE_6_PLUS?iPhone6Plus:IS_IPHONE_XR?iPhoneXR:IS_IPHONE_5?iPhone:iPhone6];
    }


    [btnMessage.titleLabel setFont:[GeneralMethod setFont:@"Roboto-Light" ForiPhone6Plus:20.0 iPhone6:20.0 iPhoneXR:20.0 andiPhone:15.0]];

enter image description here

Я также добавил его в раскадровку, но он не работает в iPhone XR.

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Чтобы ответить, почему это не работает, это потому, что вы указали неправильную высоту экрана. Замените определение #define IS_IPHONE_XR на:

#define IS_IPHONE_XR (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 896.0) //896 seems to be the height after testing

, и оно должно работать.

Но зачем определять макросы и выполнять проверки с жестко закодированными значениями высоты отображения, когда вы могли бы использовать более подходящие подходы, такие как: { ссылка } узнать модель устройства? Я настоятельно рекомендую этот подход быть более обобщенным c ...

0 голосов
/ 13 января 2020

Определение размеров экрана устройства по точкам, а не по пикселям.

Эта строка никогда не будет использоваться.

#define IS_IPHONE_XR (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 1792.0)

Размер экрана iPhone XR составляет 414 × 896 точек ( 828 × 1792 пикселей).

Полный список всех iPhone размеров экрана можно найти по этой ссылке: https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/Displays/Displays.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...