У меня есть пользовательский UIPresentationController и переопределяет frameOfPresentedViewInContainerView для пользовательского представления viewController. Все работает нормально, за исключением строки состояния.Как использовать modalPresentationCapturesStatusBarAppearance = НЕТ с пользовательским UIPresentationController?
Я не хочу, чтобы панель состояния меняла внешний вид вообще - она должна просто оставаться, но она выглядела раньше. Теперь Apple Documentation: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/modalPresentationCapturesStatusBarAppearance говорит, что если modalPresentationStyle не является UIModalPresentationFullScreen ИЛИ modalPresentationCapturesStatusBarAppearance - нет, я должен быть в порядке, и строка состояния не должна меняться.
С помощью этого кода:
- (BOOL)prefersStatusBarHidden {
NSLog(
@"prefersStatusBarHidden was called %d %ld",
self.modalPresentationCapturesStatusBarAppearance,
(long)self.modalPresentationStyle
);
return YES;
}
Я могу видеть, что prefersStatusBarHidden называется, даже если modalPresentationCapturesStatusBarAppearance НИКАКОЙ (отображается как 0) и modalPresentationStyle является UIModalPresentationCustom (отображается как 4).
Очевидно, что это является причиной изменения строки состояния при представлении viewController.
Но почему?
Моя мысль об этом заключается в том, что iOS считает, что viewController представлен в полноэкранном режиме, даже если это не так.
Я обнаружил, что свойство UIPresentationController shouldPresentInFullscreen - оно возвращает YES по умолчанию. Возвращение NO не помогает вообще, поэтому я не понимаю, что это свойство даже делает ... Это не имеет никакого эффекта. То же самое относится к свойству presentationStyle - я не вижу никакого эффекта при его изменении. Я бы ожидал, что свойство presentationStyle будет «перенаправлено» на свойство viewControllers modalPresentationStyle, но это останется в UIModalPresentationCustom, который должен состоять в том, чтобы инициировать пользовательскую презентацию в первую очередь.
Итак, мои вопросы: кто-нибудь знает, как просто сохранить строку состояния так же, как с пользовательским UIPresentationController, - и может ли кто-нибудь объяснить свойства shouldPresentInFullscreen и presentationStyle?
Спасибо! :)
Вы когда-нибудь разбирали это? Я также пытаюсь заставить UIPresentationController не отображать полный экран (на самом деле я хочу иметь возможность взаимодействовать с некоторыми базовыми элементами представления - как панель вкладок). Я не могу понять, как заставить его предоставить мне presentingViewController, который не является контроллером корневого представления окна. –
Нет, к сожалению, я так и не понял :( –
Похоже, это было исправлено в iOS 10. Я придумал хакерское решение для iOS 9 здесь: https: // stackoverflow.com/questions/34819013/presenting-a-view-controller-without-change-the-status-bar-color-like-uialert/34819014 # 34819014 –