繁体   English   中英

过渡到新的视图控制器时如何更新状态栏样式?

[英]How to update the status bar style when transitioning to a new view controller?

我有一个容器视图控制器,它使用以下代码从一个子视图控制器过渡到另一个子视图:

- (void)switchToNewViewController:(UIViewController *)newController {
  [self 
    transitionFromViewController:self.currentViewController 
    toViewController:newController
    duration: 0.6
    options:UIViewAnimationOptionTransitionFlipFromLeft
    animations:^{
      newController.view.frame = self.currentViewController.view.frame;
    }
    completion:^(BOOL finished) {
      [self.currentViewController removeFromParentViewController];
      [newController didMoveToParentViewController:self];
      self.currentViewController = newController;
    }
  ];
}

- (UIViewController*)childViewControllerForStatusBarStyle
{
  return self.currentViewController;
}

当第一个视图控制器喜欢状态栏中的深色文本,而下一个视图控制器则喜欢浅色的文本时,我有一个问题。

第一视图控制器:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleDefault;
}

第二个视图控制器:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

我在第一个和第二个视图控制器的preferredStatusBarStyle中都设置了一个断点。 调试器仅在第一个视图控制器上中断,而在第二个视图控制器上不中断。 因此,状态栏样式不会更改。 我如何通知Cocoa框架它需要读取第二个视图控制器的首选项?

确保Info.plist文件中的UIViewControllerBasedStatusBarAppearance设置为YES 这应该确保每个视图控制器都调用preferredStatusBarStyle

失败的话,将上面的plist键设置为NO ,然后在每个UIViewController的实现文件中的viewWillAppear中添加以下内容:

if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { [self setNeedsStatusBarAppearanceUpdate]; }

您将需要确保在每个需要更新状态栏外观的视图控制器中都实现了这一点。

如果其他所有方法都失败

从任何要更新状态栏样式的位置调用以下命令:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

显然用所需的状态栏样式替换了样式。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM