Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在状态栏iOS 7上方添加UIView横幅_Ios_Objective C_Ios7_Ios7 Statusbar - Fatal编程技术网

在状态栏iOS 7上方添加UIView横幅

在状态栏iOS 7上方添加UIView横幅,ios,objective-c,ios7,ios7-statusbar,Ios,Objective C,Ios7,Ios7 Statusbar,我试图在收到应用内推送通知时在状态栏上方添加横幅。据我所知,在iOS 7中动态更改状态栏样式的唯一方法似乎是将UIViewControllerBasedStatusBarAppearance设置为NO。这不仅是因为必须将所有不同的视图控制器prefersStatusBarHidden更改为[UIApplication sharedApplication].statusBarHidden,而且还没有达到我想要的效果 当横幅从顶部滑动时,我仍然希望状态栏提供的20点空间保持不变,但状态栏内容将消失,

我试图在收到应用内推送通知时在状态栏上方添加横幅。据我所知,在iOS 7中动态更改状态栏样式的唯一方法似乎是将
UIViewControllerBasedStatusBarAppearance
设置为
NO
。这不仅是因为必须将所有不同的视图控制器
prefersStatusBarHidden
更改为
[UIApplication sharedApplication].statusBarHidden
,而且还没有达到我想要的效果

当横幅从顶部滑动时,我仍然希望状态栏提供的20点空间保持不变,但状态栏内容将消失,直到横幅向后滑动。有没有办法在状态栏上方添加子视图或窗口

基本上,我希望这样做:


创建一个新窗口,并将您的横幅视图添加到该窗口中。当需要显示横幅时,可以设置
yourwindow.hidden=NO
您可以进一步添加动画来显示它,并将其关闭
yourwindow.hidden=YES

这里的关键是设置
yourwindow.windowLevel=UIWindowLevelStatusBar+1

这将确保横幅视图和
yourwindow
始终显示在状态栏上方


请随时询问有关上述任何一项的问题。

要将视图控制器置于状态栏上方,请执行以下操作:

[[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelStatusBar+1];
[[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelNormal];

要将视图控制器置于状态栏后面,请执行以下操作:

[[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelStatusBar+1];
[[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelNormal];

在状态栏上方添加UIView横幅-Swift4

func showBannerView(bannerView:UIView){
     let window = UIApplication.shared.keyWindow!
    window.addSubview(bannerView)
    window.windowLevel = UIWindowLevelStatusBar+1
}
func removeBannerView(bannerView:UIView){
    bannerView.removeFromSuperview()
    let window = UIApplication.shared.keyWindow!
    window.windowLevel = UIWindowLevelStatusBar - 1

} 

谢谢!行
yourwindow.windowLevel=UIWindowLevelStatusBar+1是关键。作为后续操作,状态栏样式在显示横幅之前为白色,但在显示并消失后变为黑色。我怎样才能强迫状态栏再次变为白色而不必离开屏幕并返回呢。我在做
[WindowMakeKeyAndVisible]
而不是只做
window.hidden=NO工作完美!嘿@dezinezync,当我想显示自定义状态视图时,如何将我的自定义
UIWindow
添加到我的视图中?@dee您不会将其添加到任何特定视图中。您只需使用myWindow.hidden=NO。如果愿意,您可以将窗口框架定位为视图的一部分。我可能错了,考虑到UIWindow是一个专门的UIView,可能有更好的方法,但在撰写本文时,我就是这么做的。@dezinezync,谢谢你的回答。我很困惑,没有必要将窗口添加到它的superview来显示它?我遵循您的提示,我可以在不将窗口附加到superview的情况下显示窗口,但是当我更新窗口的子视图时,子视图不会更改。为什么?谢谢Nico!!要为发布图像制作屏幕截图,使状态栏透明或将其隐藏在窗口后面非常有帮助!你救了我一天iPhone XY怎么办在iPhone x上使用时,你需要在横幅视图内容中添加30px的顶部填充。