- (void)setBarHidden:(BOOL)hidden animated:(BOOL)animated
{
NSTimeInterval duration = 0.0;
if (animated) {
duration = 0.3;
}
// 先にStatusBarの表示を始める
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationFade];
// 表示する場合、実際は先に表示設定にする
if (!hidden) {
[self.navigationController setNavigationBarHidden:NO];
}
[UIView animateWithDuration:duration animations:^{
self.navigationController.navigationBar.alpha = hidden ? 0 : 1;
} completion:^(BOOL finished) {
// 非表示にする場合、アニメーション終了後、非表示設定にする
if (hidden) {
[self.navigationController setNavigationBarHidden:YES];
}
}];
}
追記:StatusBarが既に消えている場合、NavigationBarの位置がずれる問題に対処