我开发的iPhone应用程序(仅)在用户选择日期时显示日期选择器。当显示日期选择器时,屏幕的其余部分将变暗,因此日期选择器上的视觉焦点更加明显。目前通过在屏幕大小处添加部分不透明的黑色按钮并将datePicker
添加为子视图来实现此效果。到目前为止没问题。
问题是状态栏没有受到影响。因为我的状态栏是白色的,所以当屏幕的其余部分变暗时,它变得更加显着。我希望状态栏也变暗/变暗。
我见过一款应用程序可以完全满足我的需求。我搜索了很多,但我不知道如何实现它。有没有办法设置状态栏的不透明度或将其与另一个视图重叠?
感谢任何帮助。
答案 0 :(得分:4)
这很简单。您需要做的是创建一个UIWindow
级UIWindowLevelStatusBar
。这将与状态栏重叠。以下是示例代码:
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
。然后,如果要将状态栏样式更改为light,请在视图控制器中添加以下代码:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
答案 1 :(得分:1)
这里有几种选择。
隐藏状态栏。这是最简单的 - 隐藏它,显示你的选择器,选择日期,显示状态栏,隐藏选择器。此外,如果您将显示和隐藏在与日期选择器显示/隐藏相同的动画块中,它将同步动画。
@reecon建议,为UIWindowLevelStatusBar + 1
级别的选择器使用一个窗口。这一点很复杂,但并不多。根据经验,我建议您使用简单的视图控制器直接使用内容视图,或者使用根清晰的颜色视图来保存内容视图。您可以按[UIView transitionWithView:window duration:0.3
options:UIViewAnimationOptionTransitionCrossDissolve animations: ^ {
[window makeKeyAndVisible]; } completion:nil;
为窗口设置动画。记得要保留窗户,否则你甚至都不会看到它,因为它被取消分配;窗口不会被系统保留。 查看我的LNWindowManager
库,以获得更简单的窗口演示API。
仅在状态栏框架顶部显示叠加窗口。这样更容易维护,因为只要状态栏框架发生变化,您就可以将窗口调整到状态栏框架。
答案 2 :(得分:0)
您可以尝试查看RMDateSelectionViewController
,这样您就可以选择UIActionSheet
样式的数据(因此背景会变暗)。