Как отобразить UIView, который перекрывает UINavigationBar

В моем приложении я хочу инициировать UIView который перекрывает и затемняет весь экран, включая UINavigationBarкод такой, как показано ниже:

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

но на самом деле self.holedView может только затемнить район без UINavigationBar на экране. Как я могу это сделать?

4 ответа

Решение

Вы можете добавить представление как подпредставление к представлению окна или контроллера навигации.

[self.navigationController.view addSubview:yourView];

ИЛИ ЖЕ

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

Создайте делегата представления для удаления его из суперпредставления при необходимости

Вы можете использовать затемненное прозрачное изображение и установить его в качестве фонового изображения панели навигации.

Например, в моем случае я сделал черное прозрачное изображение с альфа 0.2 и установил его как фоновое изображение для навигации и сделал цвет фона прозрачным

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

Я использую это, чтобы добавить subView в главном окне:

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

Вы можете добавить его в окно

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;
}
Другие вопросы по тегам