【问题标题】:Add UIView banner above status bar iOS 7在 iOS 7 状态栏上方添加 UIView 横幅
【发布时间】:2014-03-07 04:24:08
【问题描述】:

我正在尝试在收到应用内推送通知时在状态栏上方添加横幅。从我一直在阅读的内容来看,在 iOS 7 中动态更改状态栏样式的唯一方法似乎是将UIViewControllerBasedStatusBarAppearance 设置为NO。不得不将我所有不同的视图控制器 prefersStatusBarHidden 更改为 [UIApplication sharedApplication].statusBarHidden 不仅真的很烦人,而且它也没有达到我想要的效果。

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

基本上我希望这样做:

【问题讨论】:

    标签: ios objective-c ios7 ios7-statusbar


    【解决方案1】:

    将视图控制器放在状态栏上方:

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

    将视图控制器放在状态栏后面:

    [[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelNormal];
    

    【讨论】:

    • 谢谢尼科!!要为启动图像制作屏幕截图,使状态栏透明或将其隐藏在窗口后面非常有帮助!你拯救了我的一天
    【解决方案2】:

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

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

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

    请随时就上述任何问题提出问题。

    【讨论】:

    • 非常感谢! yourwindow.windowLevel = UIWindowLevelStatusBar+1; 这行是关键。作为后续,状态栏样式在横幅显示之前是白色的,但一旦显示和消失就会变为黑色。如何强制状态栏再次变白而不必离开屏幕并返回?
    • 没关系。我在做[window makeKeyAndVisible] 而不仅仅是window.hidden = NO; 完美!
    • 嘿@dezinezync,当我想显示自定义状态视图时,如何将我的自定义UIWindow 添加到我的视图中?
    • @dee 您不会将其添加到任何特定视图中。您只需使用 myWindow.hidden = NO。如果您愿意,您可以将窗口的框架定位为它显示为您的视图的一部分。我可能是错的,考虑到 UIWindow 是一个专门的 UIView,可能有更好的方法,但在写这篇文章时,我就是这样做的。
    • @dezinezync,感谢您的回答。我很困惑,没有必要将窗口添加到它的超级视图中来显示它?我按照你的提示,我可以在不将其附加到 superview 的情况下显示窗口,但是当我更新窗口的 subview 时,子视图不会改变。为什么?
    【解决方案3】:

    在状态栏上方添加 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
    
    } 
    

    【讨论】:

    • 用 iPhone X 做什么
    • 在 iphone x 上使用此功能时,您需要为横幅视图内容添加 30px 顶部填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多