Я пытаюсь скрыть строку состояния, чтобы один из моих контроллеров был скрыт (при отображении модально). Когда я представляю контроллер представления, строка состояния должна быть скрыта, а затем возвращена после отклонения.
Я добавил следующий код к представленному контроллеру представления
- (BOOL)prefersStatusBarHidden
{
return YES;
}
Я также установил ключи в файле Info.plist следующим образом:
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>
Из моего понимания это должно быть все, что требуется для выполнения этой работы.
Я также использую пользовательский контроллер анимации, чтобы выполнить презентацию, которая соответствует протоколу UIViewControllerAnimatedTransitioning
. В реализации animateTransition:
я попытался вручную вызвать prefersStatusBarHidden
, а затем setNeedsStatusBarAppearanceUpdate
, чтобы убедиться, что вызов выполнен, но строка состояния остается.
Любые идеи, почему это происходит, будут оценены. Я искал StackOverflow, но, похоже, никто не имел этой проблемы, все принятые ответы относятся к вызову setNeedsStatusBarAppearanceUpdate
, который я уже делаю.
EDIT. Теперь код ниже выглядит как РАБОТА
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext
{
if (self.isPresenting) {
UIView *containerView = [transitionContext containerView];
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
toViewController.view.frame = containerView.frame;
[containerView addSubview:toViewController.view];
// Ask the presented controller whether to display the status bar
[toViewController setNeedsStatusBarAppearanceUpdate];
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.alpha = 1.0f;
fromViewController.view.alpha = 0.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
}];
}
else {
// do the reverse
UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
[UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
toViewController.view.alpha = 1.0f;
fromViewController.view.alpha = 0.0f;
} completion:^(BOOL finished) {
[transitionContext completeTransition:YES];
// Once dismissed - ask the presenting controller if the status bar should be presented
[toViewController setNeedsStatusBarAppearanceUpdate];
}];
}
}
....
// PresentingController.m
- (BOOL)prefersStatusBarHidden
{
if (self.presentedViewController) {
return YES;
}
return NO;
}
// PresentedController.m
- (BOOL)prefersStatusBarHidden
{
return YES;
}