nacho4dの答えはほとんど私が望んでいたものです。しかし、彼はnavBarが表示される前にnavBarのフレームを変更します。そのため、トランジションアニメーションが表示されません。navBarが突然表示されたようです。さらに、表示すると、statusBarFrame.size.heightは0になります。彼のコードは次のとおりです:</ p>
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:animationDuration animations:^{
navBar.frame = CGRectMake(navBar.frame.origin.x,
statusBarFrame.size.height,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}];
表示するときは、ナビゲーションバーでステータスバーをスライドさせたいと思います。これが私の答えです:
UINavigationBar *navBar = self.navigationController.navigationBar;
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.35 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
// make navigationBar visual
if (!hidden)
{
[self.navigationController setNavigationBarHidden:hidden animated:NO];
}
navBar.frame = CGRectMake(navBar.frame.origin.x,
hidden ? -navBar.frame.size.height : 20,
navBar.frame.size.width,
navBar.frame.size.height);
} completion:^(BOOL finished) {
if (hidden)
{
[self.navigationController setNavigationBarHidden:hidden animated:NO];
}
}];
- 隠しているとき、そして隠されているときはNOに等しい。最初にnavBarのフレームを変更してから、navBarを非表示にする必要があります。
- を表示し、非表示にするとYESになります。最初にnavBarを視覚化し、次にフレームを変更します。
- 見栄えを良くするために、UIViewAnimationOptionCurveEaseOutを選択します。