Сохранить оригинальный внешний вид строки состояния при использовании пользовательского контроллера презентаций
Я представляю контроллер навигации от контроллера, содержащегося в контроллере навигации, используя пользовательский UIPresentationController
,
Моя проблема в том, что я не могу сохранить первоначальный вид строки состояния. Я не хочу отдавать контроль над строкой состояния недавно представленному модалу, вместо этого я хочу оставить это контроллеру исходного кода. Как я могу это сделать?
Я играл с modalPresentationStyle
но я ничего не смог с этим сделать, единственное разумное значение в моем случае это UIModalPresentationCustom
иначе ничего не работает или становится довольно странным.
Я не реализую preferredStatusBarStyle
в любом месте, потому что на iOS 9 навигационный контроллер выбирает правильный из стиля панели навигации.
self.stackTransitionDelegate = [[StackTransitionDelegate alloc] init];
controller.modalPresentationStyle = UIModalPresentationCustom;
controller.transitioningDelegate = self.stackTransitionDelegate;
[self.presentationContext presentViewController:controller animated:YES completion:nil];
Сам переход является полумодальным, это означает, что некоторая часть контроллера источника остается на экране. Вот почему UIPresentationController
реализует подкласс shouldRemovePresentersView
- (BOOL)shouldPresentInFullscreen {
return NO;
}
Обновить:
Следующий радар: ( https://openradar.appspot.com/22565293) описывает проблему, и с помощью частного метода я могу предотвратить отображение представленного контроллера в строке состояния.
- (BOOL)_shouldChangeStatusBarViewController {
if([self.presentedViewController isBeingPresented]) {
return NO;
}
return YES;
}
Интересно, есть ли какой-нибудь официальный способ добиться того же.
1 ответ
Вот как я обошел это:
- (UIStatusBarStyle)preferredStatusBarStyle {
UIViewController *viewController = self.presentingViewController;
while ([viewController childViewControllerForStatusBarStyle]) {
viewController = [viewController childViewControllerForStatusBarStyle];
}
return [viewController preferredStatusBarStyle];
}