Подтвердить что ты не робот

При скрытии строки состояния моя панель навигации перемещается вверх в iOS7

Я пытаюсь скрыть панель состояния, но поддерживаю "большую" высоту навигационной панели. Прямо сейчас, когда я скрываю строку состояния, устанавливая - (BOOL)prefersStatusBarHidden на YES, а затем вызываю [self setNeedsStatusBarAppearanceUpdate];. Проблема в том, что навигационная панель будет скользить вверх и не оставит места для уведомления, которое я пытаюсь показать. Простое добавление представления о панели состояния не является опцией, наша панель состояния/навигации обладает эффектом размытия. Кто-нибудь знает, как поддерживать стандартную высоту навигационной панели с высотой строки состояния и удалять из нее строку состояния?

Изменить; то, что я закончил делать, рискует и получает UIWindow строки состояния через частный API и компенсирует это.

Изменить 2; Приложение одобрено частным API. Будьте осторожны!

4b9b3361

Ответ 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