【问题标题】:How to cover also the UIStatusBar with UIView when i cover all the screen with the UIView? (iPhone)当我用 UIView 覆盖所有屏幕时,如何用 UIView 覆盖 UIStatusBar? (苹果手机)
【发布时间】:2011-01-06 01:07:29
【问题描述】:

当我用 UIView 覆盖所有屏幕时,如何用 UIView 覆盖 UIStatusBar?

【问题讨论】:

    标签: ios objective-c uiview screen uistatusbar


    【解决方案1】:

    我也在为如何做到这一点而奋斗了很长时间!终于弄明白了 :) 关键是将新窗口的 windowLevel 设置为非常高,以便它位于所有其他窗口/视图/状态栏等之上:

    UIWindow *keyWin = [UIApplication sharedApplication].keyWindow;
    UIWindow *hudWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0.0f, 0.0f, keyWin.frame.size.width, keyWin.frame.size.height)];
    hudWindow.backgroundColor = [UIColor blackColor];
    hudWindow.alpha = 0.60;
    [hudWindow setWindowLevel:10000.0f];
    [hudWindow setHidden:NO];
    

    享受吧!

    【讨论】:

    • 我进一步挖掘,发现windowLevel属性有一些代表某些级别的常量: const UIWindowLevel UIWindowLevelNormal;常量 UIWindowLevel UIWindowLevelAlert;常量 UIWindowLevel UIWindowLevelStatusBar;我发现 UIWindowLevelStatusBar 可以解决问题。
    • 请注意,如果您在应用启动时调用keyWindow,则该值可能为nil。最好使用[[UIScreen mainScreen] bounds]来获取窗框。
    • 当键盘在屏幕上时这不起作用。
    【解决方案2】:

    你能做的最好的事情是隐藏状态栏:

    [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]
    

    并在需要时再次显示。

    您基本上可以随时removeFromSuperview 删除视图。

    【讨论】:

    • 该 API 已弃用。替换为setStatusBarHidden:withAnimation:
    【解决方案3】:

    如果您尝试创建类似UIAlertView 的效果,我认为您无法做到这一点。您可以通过 http://bugreporter.apple.com 向 Apple 提出功能增强请求。

    【讨论】:

    • 这是可行的,只需使用 UIWindow。我用我采用的方法添加了答案。
    【解决方案4】:

    很好,但我做了这两个更改。给 UIWindowLevel 加 1.0 还是会隐藏状态栏,我也不知道为什么。

    self.windowLevel = UIWindowLevelStatusBar+2.0f;
    
    self.userInteractionEnabled = NO;
    

    将状态栏 userInteractionEnabled 属性设置为 NO 将确保当有人点击此状态栏时,您的滚动视图将滚动到顶部。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多