Есть ли способ предотвратить изменение стиля стойки UIImagePickerController?

UIImagePickerController изменяет стиль панели состояния на черный/непрозрачный. Я хочу сохранить статус-бар в черном/полупрозрачном. Я нахожу способ предотвратить изменение стиля строки состояния. Или сделать это плавно. Теперь представление UIImagePickerController мгновенно меняет статус-бар, даже - [presentModalViewController: picker animated: YES].

Любой метод, приветствующий, включая хакерский или частный метод. Это приложение для AppStore, однако я хочу даже попробовать.

Ответы

Ответ 1

Я хотел, чтобы строка статуса оставалась черной непрозрачной, пока показывала сборщик фотографий (фотосъемщик менял его на черный полупрозрачный), и это решило проблему для меня.

Установите UIImagePickerDelegate:

libraryUI.delegate = self;

Внедрите следующий обратный вызов:

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController 
                    animated:(BOOL)animated {

    if ([navigationController isKindOfClass:[UIImagePickerController class]] && 
        ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        [[UIApplication sharedApplication] setStatusBarHidden:NO];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    }
}

Здесь вы можете указать любой тип строки состояния. В вашем случае вам, вероятно, придется удалить проверку sourceType и указать UIStatusBarStyleBlackTranslucent.

Ответ 2

Попробуйте это отлично работать на ios 8

-(void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack];
}

Ответ 3

Если вы хотите полностью отключить изменение стиля строки состояния, вы можете добавить категорию UIApplication, которая блокирует ее.

@implementation UIApplication (MyCategory)
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle {}
@end

Если это работает, но вы хотите выборочно отключить изменения, попробуйте подклассифицировать UIApplication, чтобы вы могли вызвать super, когда хотите передать изменение.

Ответ 4

Я нашел для меня более легкий подход. Просто сделайте

[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self.delegate setNeedsStatusBarAppearanceUpdate];

и строка состояния скрыта (код изменения, если вы хотите, чтобы он был видимым). Должен быть вызван после выбора изображения из UIImagePickerController.