Сохранить оригинальный внешний вид строки состояния при использовании пользовательского контроллера презентаций

Я представляю контроллер навигации от контроллера, содержащегося в контроллере навигации, используя пользовательский 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];
}
Другие вопросы по тегам