如何显示与UINavigationBar重叠的UIView

时间:2015-05-06 07:49:05

标签: ios objective-c uiview uinavigationbar mainscreen

在我的应用程序中,我想发起一个UIView重叠并使整个屏幕变暗,包括UINavigationBar,代码如下:

- (void)showInstruction
{
    self.holedView = [[JMHoledView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    [self.view addSubview:self.holedView];
}

但实际上self.holedView只能在屏幕上没有UINavigationBar的情况下使区域变暗。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

您可以将视图作为子视图添加到窗口或导航控制器的视图中。

[self.navigationController.view addSubview:yourView];

OR

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

创建视图的委托,以便在需要时将其从superview中删除

答案 1 :(得分:1)

您可以使用灰色透明图像并将其设置为导航栏的背景图像。

例如在我的情况下,我制作了alpha 0.2的黑色透明图像并将其设置为导航背景图像并使背景颜色变为清晰的颜色

 [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"black_patch.png"]
                                              forBarMetrics:UIBarMetricsDefault];
[UINavigationBar appearance].translucent = YES;
navController.view.backgroundColor = [UIColor clearColor];

答案 2 :(得分:0)

我用它来在主窗口中添加subView:

[[UIApplication sharedApplication].keyWindow addSubview:view];

答案 3 :(得分:0)

您可以将其添加到窗口

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication  sharedApplication] delegate];
UIView *backgrView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height)];
backgrView.backgroundColor = [UIColor blackColor];
backgrView.alpha = 0.6;
[[appDelegate window] addSubview:backgrView];

Try navigationBar.translucent = NO; , It is YES by default in iOS7.


 So you can add a version check like this:

 float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0)
{
 navigationBar.translucent = NO;
}