最近遇到在寫導航條的顯示與隱藏,界面A沒有導航條,需要push出一個帶導航的界面B。
代碼就是在navigationViewController.m文件實現UINavigationControllerDelegate的
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[self setNavigationBarHidden:[self isNeedHidden] animated:YES];
}
其中isNeedHidden方法的邏輯參照需要自己處理。
這里就可以實現導航條的顯示與隱藏了,但是我這里稍微特殊的是界面A的狀態欄是白色,界面B的狀態欄是黑色,所以在界面A的.m文件中設置了方法
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
單單這樣設置就可以完成所需要的效果,但是在手勢返回界面A的時候,如果快速滑動一小段距離后取消掉返回手勢,當前的頁面的狀態欄就會出現隱藏掉的BUG。
后來發現原來是設置狀態欄的問題,最后在Nav中添加了
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
- (UIViewController *)childViewControllerForStatusBarStyle
{
if (需要顯示為白色狀態欄)
{
return self.topViewController;
}
return [super childViewControllerForStatusBarStyle];
}
這樣就完美的解決了問題。