Изменение высоты строки состояния в зависимости от того, является ли устройство iPhone X или нет

В моем приложении я использую пользовательский модуль под названием MMDrawerController, чтобы создать фиктивную строку состояния, к сожалению, в модуле высота строки состояния всегда равна 20.

Чтобы решить эту проблему, я написал следующий код:

Приложение делегат

MMDrawerController *mmdrawer = [[MMDrawerController alloc]init];


//UPDATE IPHONE X STATUS BAR
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    CGSize screenSize = [[UIScreen mainScreen] bounds].size;
    if (screenSize.height == 812.0f) {
        NSLog(@"DEVICE NAME : iPhone X");
        self.iphoneXHeight = -45.0;
        self.iphoneXHeightPos = 45.0;
        mmdrawer.height = 40;
    }
    else {

        self.iphoneXHeight = -20.0;
        self.iphoneXHeightPos = 20.0;
        mmdrawer.height = 20;


    }
}

MMDrawerController.h

@property (nonatomic,assign) CGFloat height;

MMDrawerController.m

  _dummyStatusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), self.height)];

Проблема:

Когда я запускаю свой код height свойство всегда равно 0, было бы полезно, если бы кто-то мог указать, что я здесь делаю неправильно, и как я могу получить доступ к свойству высоты и изменить его?

2 ответа

Решение

Не используйте фиксированную высоту для строки состояния, вы можете получить высоту с помощью этого кода:

UIApplication.sharedApplication.statusBarFrame.size.height

Измени эту строку.

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if (screenSize.height == 812.0f) {
    NSLog(@"DEVICE NAME : iPhone X");
    self.iphoneXHeight = -45.0;
    self.iphoneXHeightPos = 45.0;
    mmdrawer.height = 40;
}

С этим:

if([[UIDevice currentDevice]userInterfaceIdiom]==UIUserInterfaceIdiomPhone) {
  // determine screen size
int screenHeight = [UIScreen mainScreen].bounds.size.height;

switch (screenHeight) {
        // iPhone 5s
    case 568:
        NSLog(@"iPhone 5 or 5S or 5C");
        break;
        // iPhone 6
    case 667:
        NSLog(@"iPhone 6/6S/7/8");
        break;
        // iPhone 6 Plus
    case 736:
        NSLog(@"iPhone 6+/6S+/7+/8+");
        break;
        // iPhone X
    case 814:
        NSLog(@"iPhone X");
        break;
    default:
        // it's an iPad
        printf("unknown");
}

}
Другие вопросы по тегам