簡體   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