2015-05-06 6 views
0

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

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

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

+0

Можете ли вы представить картину того, что вы пытаетесь для того чтобы достигнуть? – faviomob

+0

Добавить свое мнение на 'self.view.window' – NightFury

+0

Извините, у меня должно быть 10 репутаций, чтобы опубликовать изображение T.T –

ответ

2

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

[self.navigationController.view addSubview:yourView]; 

ИЛИ

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

Создание делегата вида по удалить его из надтаблицы по мере необходимости

+0

Это работает !! Спасибо ... –

+0

Или, как говорится в комментарии, добавьте myview в self.view.window; есть некоторые отличия, и я пытаюсь понять это ... –

1

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

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

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

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

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

Спасибо, но это просто не подходит для моего дела ... –

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; 
}