25

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

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

基本上我正在寻找这样做:

Facebook Messenger 推送横幅

4

3 回答 3

46

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

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

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

[[[[UIApplication sharedApplication] delegate] window] setWindowLevel:UIWindowLevelNormal];
于 2014-03-25T15:10:48.183 回答
33

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

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

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

随时提出有关上述任何问题的问题。

于 2014-03-07T06:21:21.927 回答
4

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

} 
于 2018-02-23T08:51:11.120 回答