如何添加覆盖所有其他视图的黑屏(包括导航栏和状态栏)?

时间:2013-11-04 21:25:53

标签: ios objective-c uiview ios7

我想在我的所有视图上添加一个黑屏,然后在其上方显示一个通知窗口,如Tweetbot 3:

enter image description here

但是,我不完全确定这是如何实现的。

添加一个带有屏幕大小的暗视图,因为它的框架不起作用,如下所示:(导航栏和状态栏未被覆盖)

UIView *darkOverlay = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
darkOverlay.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
[self.view insertSubview:darkOverlay behindSubview:self.view];

这涵盖除了状态栏以外的所有内容(所以它非常接近,但由于我的状态栏内容很轻,所以它仍然非常刺耳):

[[[UIApplication sharedApplication] keyWindow] addSubview:darkOverlay];

那么这样的事情是如何实现的呢?

4 个答案:

答案 0 :(得分:3)

你必须这样做:

CGRect screenRect = [[UIScreen mainScreen] bounds];
_darkCoverView = [[UIView alloc] initWithFrame:screenRect];
_darkCoverView.backgroundColor = [UIColor blackColor];
_darkCoverView.alpha = 0.5;

[[[[UIApplication sharedApplication] delegate] window] addSubview:_darkCoverView];

它适用于我,状态栏也包括在内:)

答案 1 :(得分:3)

你可以试试这个方法

    UIWindow* window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    window.windowLevel = UIWindowLevelAlert;
    window.opaque = NO;

    [window addSubview:someView];

    // window has to be un-hidden on the main thread
    [window makeKeyAndVisible];

“view” - 您的自定义弹出窗口。

答案 2 :(得分:1)

您可以尝试以模态方式呈现它,因为模态视图控制器位于导航控制器之上。

TransparancyViewController *vc=[[TransparancyViewController alloc]initWithNibName:@"TransparancyViewController" bundle:nil] ;
vc.view.backgroundColor = [UIColor clearColor];
navController.view.alpha = 0.3;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;
[navController presentViewController:vc animated:NO completion:nil];

与故事板一起使用的小样本项目.. http://cl.ly/442C11341k2G

答案 3 :(得分:0)

创建darkOverlayView时,最好指定视图的实际边界,这应该填满整个屏幕(iPhone 5的宽度,高度)。

UIView *darkOverlay = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320, 568)];

如果您的通知对象也是UIView,请将其置于最前面。

[self.view addSubView:darkOvelay]
[self.view bringSubviewToFront:notificationView];

我希望这能解决你的问题,欢呼,吉姆。