调暗iOS7状态栏
我正在开发一个iPhone应用程序,当用户选择日期时,它(仅)显示一个日期选择器。当显示日期选择器时,屏幕的其余部分将变暗,因此在日期选择器上有更多的视觉焦点。目前,可以通过在屏幕大小处添加一个部分不透明的黑色按钮,并将调暗iOS7状态栏,ios,iphone,ios7,statusbar,Ios,Iphone,Ios7,Statusbar,我正在开发一个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
样式拾取数据(因此背景变暗)。您在这里有几个选项
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
方法来更改状态栏样式。我更新了答案。我查看了该项目,但它不会使状态栏变暗。就像我的应用程序一样,它使用半透明的黑色视图来覆盖主窗口视图。当使用白色状态栏时,很明显黑色视图没有覆盖状态栏。