Есть ли способ предотвратить изменение стиля стойки 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.