所以,经过Simon Holroyd先生的初步推动和一番搜索,我找到了如何实现这个“效果”功能的解决方案。这是代码:
statusbarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 20)];
编辑:pcholberg先生正确地指出,以前的代码在实际设备上不起作用,只能在 iOS 模拟器上运行,所以我根据他的建议对其进行了编辑
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *screenShot = [[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO];
[statusbarView addSubview:screenShot];
[statusbarView setClipsToBounds:YES];
[self.view addSubview:statusbarView];
[self setPrefersStatusBarHidden:YES];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
...
- (BOOL)prefersStatusBarHidden
{
return prefersStatusBarHidden;
}
...
所以第一部分创建上下文,使用西蒙提到的方法,用状态栏绘制视图,并将其保存为UIImage
第二部分将快照添加UIView
到我的 viewController 的UIView
第三部分将状态栏的我的 bool 设置为 YES(为了在上面的方法中更容易使用),并调用方法来重绘它
然后,这会将 UIView 设置为无效状态栏并隐藏原始状态栏,因此没有双重渲染。然后我可以在我的[UIView animateWithDuration...
方法中使用这个视图
当我返回时,我在动画块的完成处理程序中使用此代码:
[statusbarView removeFromSuperview];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
[self setPrefersStatusBarHidden:NO];
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
瞧!这就像我的问题中描述的效果一样。
希望这对某人有帮助!