考虑一个在单击按钮时需要滑出(或隐藏)状态栏的视图控制器。
- (void) buttonClick:(id)sender
{
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
}
以上有效地隐藏了状态栏,但没有适当调整根视图的大小,在顶部留下 20 像素的间隙。
我期望的是根视图扩展状态栏先前使用的空间(动画,与状态栏动画具有相同的持续时间)。
这样做的正确方法是什么?
(我知道有很多类似的问题,但我找不到任何关于按需隐藏状态栏而不是隐藏它以显示新视图控制器的信息)
“蛮力”方法
显然,以下工作......
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationSlide];
[UIView animateWithDuration:0.25 animations:^{
CGRect frame = self.view.frame;
frame.origin.y -= 20;
frame.size.height += 20;
self.view.frame = frame;
}];
...但有缺点:
- 硬编码幻灯片动画的持续时间
- 硬编码状态栏的高度
- 根视图原点保持在 (0,-20)。我喜欢我的帧尽可能从 (0,0) 开始。
我已经尝试过的
- 确保根视图的自动调整大小掩码具有
UIViewAutoresizingFlexibleTopMargin
和UIViewAutoresizingFlexibleHeight
. [self.view setNeedsLayout]
隐藏状态栏后调用。[self.view setNeedsDisplay]
隐藏状态栏后调用。- 设置
wantsFullScreenLayout
为YES
隐藏状态栏前后。