iOS Скрыть строку состояния для iPhone 6 и 6+

Я пытаюсь скрыть строку состояния только для iPhone 6 и 6+, это то, что я пытался до сих пор.

if (screenWidth == 375) {
        // Remove status bar for iPhone 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES
                                                withAnimation:UIStatusBarAnimationFade];
    }else if (screenWidth == 414){
        // Remove status bar for iPhone 6 +
        [[UIApplication sharedApplication] setStatusBarHidden:YES
                                                withAnimation:UIStatusBarAnimationFade];
    }

5 ответов

Решение

Вы можете сделать (изменить файл plist):

set Status bar is initially hidden = YES

Добавить ряд:

View controller-based status bar appearance = NO

Во-первых: установите этот флаг. Для отображения внешнего вида строки состояния на контроллере установите значение YES в info.plist или добавьте его в качестве новой строки.
Второе: переопределить этот метод - (BOOL) prefersStatusBarHidden в каждой информации VC вы хотите скрыть или увидеть строку состояния. Для дочернего контроллера представления вам также необходимо реализовать этот метод - (UIViewController *)childViewControllerForStatusBarHidden
Третье: если вы изменяете внешний вид строки состояния во время выполнения, вам нужно вызвать его метод для запуска анимации -setNeedsStatusBarAppearanceUpdate
Все эти методы помогут вам создать детальный контроль над внешним видом строки состояния.
Если вам нужно сделать так, чтобы строка состояния исчезала при запуске, просто пометьте Скрыть строку состояния в общих настройках цели.

Поскольку вы просто хотите скрыть строку состояния только в iPhone 6 и iPhone 6 Plus, вы можете сделать это, как показано ниже. Сначала добавьте это в свой класс.

   #import <sys/utsname.h> 

Тогда в вашем методе viewDidLoad

 NSString *platform;
struct utsname systemInfo;
uname(&systemInfo);
platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];

if ( [platform  isEqual:@"iPhone6,1"]||[platform  isEqual:@"iPhone6,2"]){
[[UIApplication sharedApplication] setStatusBarHidden:YES
                                            withAnimation:UIStatusBarAnimationFade];
}

Добавьте следующую строку в viewDidLoad:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

и добавить новый метод

- (BOOL)prefersStatusBarHidden {
          return YES;
  }

также измените файл info.plist

View controller-based status bar appearance" = NO

А также добавьте условие для iPhone 6 и 6 Plus. Вот методы для iPhone 6 и 6 Plus:

/*=====================================================================================================================
 Checks if the device has 4.7 inch screen such as iPhone6 generation
 =====================================================================================================================*/
+(BOOL) ISiPhone6
{
    BOOL isIpad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    // we need to check the maximum of width and height because some screens (the camera view while scanning) we can
    // rotate to portrait or landscape and in the case the screen height and width flip
    return (!isIpad && MAX(screenRect.size.height,screenRect.size.width) == 667);
}

/*=====================================================================================================================
 Checks if the device has 5.5 inch screen such as iPhone6 plus 
 =====================================================================================================================*/
+(BOOL) ISiPhone6Plus
{
    BOOL isIpad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    // we need to check the maximum of width and height because some screens (the camera view while scanning) we can
    // rotate to portrait or landscape and in the case the screen height and width flip
    return (!isIpad && MAX(screenRect.size.height,screenRect.size.width) == 736);
}  

это работает для меня.

Я отправил ответ на аналогичный вопрос, вы должны использовать windowLevel из UIApplication скрыть / показать statusBar, Также мы должны установить свойство внешнего вида на основе Viewcontroller в info.plist в NO.

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