调暗iOS7状态栏

调暗iOS7状态栏,ios,iphone,ios7,statusbar,Ios,Iphone,Ios7,Statusbar,我正在开发一个iPhone应用程序,当用户选择日期时,它(仅)显示一个日期选择器。当显示日期选择器时,屏幕的其余部分将变暗,因此在日期选择器上有更多的视觉焦点。目前,可以通过在屏幕大小处添加一个部分不透明的黑色按钮,并将日期选择器添加为子视图来实现此效果。到目前为止没有问题 问题是状态栏不受影响。因为我的状态栏是白色的,所以它只会随着屏幕其他部分变暗而变得更加显著。我希望状态栏也变暗/变暗 我已经看到一个应用程序,正是我想要的。我搜索了很多,但我不知道如何实现它。有没有办法设置状态栏的不透明度或

我正在开发一个iPhone应用程序,当用户选择日期时,它(仅)显示一个日期选择器。当显示日期选择器时,屏幕的其余部分将变暗,因此在日期选择器上有更多的视觉焦点。目前,可以通过在屏幕大小处添加一个部分不透明的黑色按钮,并将
日期选择器
添加为子视图来实现此效果。到目前为止没有问题

问题是状态栏不受影响。因为我的状态栏是白色的,所以它只会随着屏幕其他部分变暗而变得更加显著。我希望状态栏也变暗/变暗

我已经看到一个应用程序,正是我想要的。我搜索了很多,但我不知道如何实现它。有没有办法设置状态栏的不透明度或与其他视图重叠


感谢您的帮助

这很简单。您需要做的是使用
UIWindowLevelStatusBar
level创建一个
UIWindow
。这将与状态栏重叠。以下是示例代码:

UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

window.windowLevel = UIWindowLevelStatusBar;
window.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.7f];

[window makeKeyAndVisible];
您可以将视图添加到此窗口。它们甚至可以与状态栏重叠。记住存储对新窗口的引用,否则它将被释放

如果要控制状态栏外观,或获取有关旋转事件的信息,应创建一个
UIViewController
,并将其设置为winndow的
rootViewController
。然后,如果要将状态栏样式更改为灯光,请在视图控制器中添加以下代码:

- (UIStatusBarStyle)preferredStatusBarStyle 
{
    return UIStatusBarStyleLightContent;
}

您可以尝试查看哪个选项使您能够以
UIActionSheet
样式拾取数据(因此背景变暗)。

您在这里有几个选项

  • 隐藏状态栏。这是最简单的-隐藏它,显示选择器,选择日期,显示状态栏,隐藏选择器。此外,如果将“显示”和“隐藏”放在与日期选择器“显示/隐藏”相同的动画块中,则它将同步设置动画

  • 按照@reecon的建议,为选择器使用一个级别为
    UIWindowLevelStatusBar+1
    的窗口。这使事情复杂化的程度很小,但不是很大。根据经验,我建议使用一个简单的视图控制器来直接显示内容视图,或者使用一个root clear color视图来保存内容视图。您可以通过
    [UIView transitionWithView:window duration:0.3]设置窗口动画
    选项:UIViewAnimationOptionTransitionCrossSolve动画:^{
    [window makeKeyAndVisible];}完成:无;
    。请记住保留窗口,否则您甚至看不到它,因为它已被释放;系统不会保留窗口。查看我的库,以获得更简单的窗口演示API。

  • 仅在状态栏框架顶部显示一个覆盖窗口。这更易于维护,因为只要状态栏框架发生变化,您就可以将窗口调整为状态栏框架


  • 与信号强度、时间和电池电量相同的状态栏?为什么不在显示日期选择器时隐藏状态栏,然后在选择日期后显示状态栏?@MarcusAdams该值在iOS7中已被弃用。为什么不尝试将
    UIDatePicker
    放在
    UIActionSheet
    中?它会自动调暗其余部分screen.@Cojoj警报视图或操作表不能包含自定义内容,尤其是在iOS7上。必须保留窗口,否则将被删除。系统不保留窗口。此外,向窗口添加子视图非常困难,因为开发人员对旋转的支持会下降。另一方面,根视图控制器是最好的选择s、 @LeoNatan,谢谢你的反馈。我在回答部分添加了关于保留窗口的内容。我不同意添加子视图很难。这很容易,只要调用
    addSubview:
    。确实我们正在失去旋转支持,但有时我们根本不关心它(如果我们只支持例如纵向模式)。没有理由不将根视图控制器与视图一起使用(即使是日期选择器本身!)。它甚至是透明的。没有理由限制旋转。我尝试了您和@LeoNatan的UIWindow解决方案。我可以肯定地看到,这是实现我想要的效果的方法。但是,当我显示UIWindow时,状态栏颜色变为黑色。这里有相同的问题:。有什么想法吗?@Tuslareb,要更改状态栏样式,您需要创建一个
    UIViewController
    并将其设置为窗口的
    rootViewController
    。然后,您必须实现
    preferredStatusBarStyle
    方法来更改状态栏样式。我更新了答案。我查看了该项目,但它不会使状态栏变暗。就像我的应用程序一样,它使用半透明的黑色视图来覆盖主窗口视图。当使用白色状态栏时,很明显黑色视图没有覆盖状态栏。