Заставить строку состояния iPhone исчезнуть при отображении модального представления?

Я хочу отобразить модальное представление и хочу, чтобы оно перекрывало строку состояния iPhone.

Я попытался установить для свойства wantFullScreenLayout модального контроллера представления значение YES; Я также установил для его родительского свойства значение YES. Это не работает, предположительно потому, что модальное представление отображается под содержимым главного окна, которое включает строку состояния.

Мой второй подход отказался от всей техники «wantFullScreenLayout» в пользу сокрытия строки состояния непосредственно перед отображением модального представления, а затем его повторного включения после того, как модальное представление было закрыто. Это работает до самого конца ... родительский вид модального представления размещен неправильно (его панель навигации частично скрыта за строкой состояния). Вызов - [view setNeedsLayout] ничего не делает.

Как мне подойти к этой проблеме?

Спасибо.


person Greg Maletic    schedule 02.02.2010    source источник


Ответы (2)


Вам понадобится - (void)setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated в классе UIApplication.

Что-то вроде этого:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];

Это должно скрыть строку состояния с красивой анимацией затухания.

person Jasarien    schedule 03.02.2010
comment
Я уже пробовал это (см. 2-й подход выше). У меня нет проблем с тем, чтобы строка состояния скрывалась и снова появлялась; проблема в том, что после того, как я заставлю его снова появиться, макет представления будет правильным. Спасибо. - person Greg Maletic; 03.02.2010
comment
Просто изменить размер представления? Установить рамку на (0,20,320,460)? - person Jasarien; 03.02.2010
comment
Это сработало! Все еще не совсем уверен, почему я должен устанавливать это вручную ... но спасибо! - person Greg Maletic; 05.02.2010
comment
Я мог ошибаться - но я думаю, что макет набора потребностей будет изменять размер / положение только вложенных представлений, а не самого представления. Это может сработать, если вы позвоните setNeedsDisplay, но я ничего не могу обещать. - person Jasarien; 05.02.2010
comment
ГДЕ изменить размер представления и заново отобразить строку состояния? Я пробовал делать и то, и другое в viewWillAppear, но безуспешно. Строка состояния вернется, но с неправильным расположением. - person AndrewS; 16.11.2010

Присоединяюсь к обсуждению поздно, но я думаю, что смогу избавить других от неприятностей.

У меня VC несколько нажатий в NavController (назовем этот VC РОДИТЕЛЕМ). Теперь я хочу отобразить модальный экран (РЕБЕНОК) со скрытой панелью навигации И строкой состояния. После долгих экспериментов я понял, что это работает ...

1) Поскольку я представляю CHILD VC, вызывая presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated в PARENT, панель навигации больше не задействована (не нужно ее скрывать).

2) Размер изображения в перо CHILD VC составляет 320x480.

3) ДЕТСКИЙ ВК устанавливает self.wantsFullScreenLayout = YES; в viewDidLoad

4) непосредственно перед представлением РЕБЕНКА скройте строку состояния с помощью [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:YES];

5) отклоните CHILD VC, используя методы протокола делегата в PARENT, и вызовите [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:YES]; перед dismissModalViewControllerAnimated:YES], чтобы убедиться, что панель навигации отображается в правильном месте.

Надеюсь это поможет.

person mputnamtennessee    schedule 27.08.2011
comment
+1 за 4). Я решил это без других шагов и снова отобразил строку состояния в -viewWillDisappear: в модальном представлении. - person Kristofer Sommestad; 05.10.2011
comment
относительно шага 4 подпись метода - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation. вы отправили второму аргументу BOOL вместо UIStatusBarAnimation. - person Or Arbel; 11.10.2012