Модальный вид будет охватывать вид, над которым он помещен, а также панель навигации для вашего контроллера навигации. Однако, если вы используете -presentModalViewController: animated: подхода, то после завершения анимации только что покрытый вид фактически исчезнет, что сделает любую прозрачность вашего модального представления бессмысленной. (Вы можете убедиться в этом, реализовав методы -viewWillDisappear: и -viewDidDisappear: в вашем корневом контроллере представления).
Вы можете добавить модальное представление непосредственно в иерархию представления следующим образом:
UIView *modalView =
[[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
modalView.opaque = NO;
modalView.backgroundColor =
[[UIColor blackColor] colorWithAlphaComponent:0.5f];
UILabel *label = [[[UILabel alloc] init] autorelease];
label.text = @"Modal View";
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor clearColor];
label.opaque = NO;
[label sizeToFit];
[label setCenter:CGPointMake(modalView.frame.size.width / 2,
modalView.frame.size.height / 2)];
[modalView addSubview:label];
[self.view addSubview:modalView];
Добавление modalView в качестве подпредставления к корневому представлению таким образом на самом деле не будет охватывать панель навигации, но охватит весь вид под ним. Я попытался поиграть с исходным кадром, использованным для инициализации modalView, но отрицательные значения приводят к тому, что он не отображается. Лучший способ, который я нашел, чтобы покрыть весь экран, кроме строки состояния, - это добавить modalView в качестве подпредставления самого окна:
TransparentModalViewAppDelegate *delegate = (TransparentModalViewAppDelegate *)[UIApplication sharedApplication].delegate;
[delegate.window addSubview:modalView];