При скрытии строки состояния моя панель навигации перемещается вверх в iOS7
Я пытаюсь скрыть панель состояния, но поддерживаю "большую" высоту навигационной панели. Прямо сейчас, когда я скрываю строку состояния, устанавливая - (BOOL)prefersStatusBarHidden
на YES
, а затем вызываю [self setNeedsStatusBarAppearanceUpdate];
. Проблема в том, что навигационная панель будет скользить вверх и не оставит места для уведомления, которое я пытаюсь показать. Простое добавление представления о панели состояния не является опцией, наша панель состояния/навигации обладает эффектом размытия. Кто-нибудь знает, как поддерживать стандартную высоту навигационной панели с высотой строки состояния и удалять из нее строку состояния?
Изменить; то, что я закончил делать, рискует и получает UIWindow строки состояния через частный API и компенсирует это.
Изменить 2; Приложение одобрено частным API. Будьте осторожны!
Ответы
Ответ 1
Вы можете создать пользовательский UIView со своим фреймом как
customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
Также скройте строку состояния, выполнив следующие шаги.
Перейдите в info.plist и добавьте два атрибута, если они отсутствуют. установите "Строка состояния изначально скрыта" до YES
и установите UIViewControllerBasedStatusBarAppearance
на NO
. Это скроет строку состояния для вашего приложения.
Ответ 2
Добавьте этот код в свой вид Контроллер:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Ответ 3
Вы должны использовать positionForBar:
метод UIBarPositioningDelegate Protocol.
Я не хочу ставить другой ответ или копию/прошлое, поэтому вам следует более внимательно рассмотреть следующий вопрос\ответы.:)
Строка состояния iOS 7 соприкасается с NavigationBar
iOS 7 UIToolBar переопределяет строку состояния
перекрытие содержимого в iOS7
Ответ 4
Я должен был сделать это один раз. Я закончил создание собственного собственного навигационного блока, а затем просто установил фрейм как:
navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height);
В то время это работало для меня. Просто попробуйте.
Ответ 5
Другой способ обхода: подкласс UINavigationController
метод переопределения:
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
if (self.navigationBar.frameMinY < 1) {
self.navigationBar.frameHeight = 64;
} else {
self.navigationBar.frameHeight = 44;
}
}
в котором установлено значение frameMinY
frame.origin.y
и установлено значение frameHeight
frame.size.height