2013-10-02 2 views
32

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

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

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

+0

«UINavigationBar» - подкласс UIView. Установите рамку так, как хотите. Если вы используете 'UINavigationController', который устанавливает свой фрейм, подкласс, который и переопределяет' viewWillLayoutSubviews'. –

+0

Полное расследование: http://stackoverflow.com/questions/21929220/show-hide-uitoolbar-match-finger-movement-precisely-as-in-for-example-ios7-s – Fattie

+0

проверить эту ссылку ссылки [настроить-навигация -status-bar-ios-7] (http://www.appcoda.com/customize-navigation-status-bar-ios-7/) – Pawan

ответ

2

Добавьте этот код в ваш взгляд контроллера:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) 
{ 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
} 
+2

Это не устраняет проблему, потому что я не хочу потерять расширенный макет. – hatfinch

1

Я должен был сделать это один раз. Я в конечном итоге создание пользовательского Панель навигации мой собственный, а затем просто установить рамки, как:

navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height); 

Он работал для меня в то время. Просто попробуйте.

3

Вы можете создать собственный UIView с его рамой, как

customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height); 

Также скрыть строку состояния, выполнив следующие шаги

Перейти к info.plist и добавить два атрибута, если нет. установите «Строка состояния изначально скрыта» до YES и установите UIViewControllerBasedStatusBarAppearance на NO. Это скроет строку состояния для вашего приложения.

+1

customView height должен быть 'self.view.frame.size.height - 20' :) – iPatel

+0

ах, я пропустил это. –

+0

Баунти автоматически присваивается, но ответ в основном правильный. Я решил проблему, выполнив замену класса 'UINavigationView', который я вручную добавляю к своим представлениям, в то время как реальная панель навигации моих контроллеров остается скрытой. Несмотря на то, что я использую элемент plist для отображения строки состояния на основе view-view и переопределяю 'prefersStatusBarHidden' – user

2

Вы должны использовать в positionForBar: method of UIBarPositioningDelegate Protocol.

Я не хочу, чтобы поставить еще один ответ или скопировать/прошлое, так что вы должны принять более пристально взглянуть на следующие вопросы \ ответы. :)

iOS 7 Status Bar Collides With NavigationBar
iOS 7 UIToolBar Overriding With Status Bar
statusbar overlapping content in iOS7

+0

привет, я работаю с TLYShyNavBar и carbonkit для навигации, спрятавшись, как на домашней странице youtube, у вас есть идея об этом? –

0

Другой обходной путь здесь: подкласс метод 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

+1

Этот метод нарушен на ios11 – dopcn

Смежные вопросы