setStatusBarHidden: НЕТ после загрузки XIB UINavigationBar

Когда setStatusBarHidden:NO устанавливается перед setStatusBarHidden:NO представления, UINavigationBar и другие элементы отображаются выравниваться сразу под StatusBar, как и должны. Однако, когда setStatusBarHidden:NO устанавливается после загрузки вида, UINavigationBar частично покрывается.

StatusBar должен быть обнаружен после загрузки указанного представления, но как это можно сделать, не сталкиваясь с вышеупомянутой проблемой?

6 Solutions collect form web for “setStatusBarHidden: НЕТ после загрузки XIB UINavigationBar”

Я нашел ручку в моем коде, хотя не могу вспомнить или найти, откуда она взялась. Хитрость состоит в том, чтобы обновить панель навигации, скрыв и перепрошив ее:

 [self.navigationController setNavigationBarHidden:YES animated:NO]; [self.navigationController setNavigationBarHidden:NO animated:NO]; 

В моем коде функция выглядит так:

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; [self.navigationController setNavigationBarHidden:YES animated:NO]; [self.navigationController setNavigationBarHidden:NO animated:NO]; } 

Однако БЫТЬ ПРЕДОСТЕРЕЖЕН , это взломать, и в настоящее время я борюсь с некоторыми ошибками, которые, как представляется, происходят из этого кода (элемент навигации не соответствует навигационному контенту). Но поскольку это работало для меня в некоторых местах, я думал, что упомянул об этом.

Редактирование: я думаю, что нашел исходный пост здесь: Как мне получить панель навигации в UINavigationController, чтобы обновить свою позицию, когда строка состояния скрыта?

GL, Одед

(Я понимаю, что это был старый вопрос, но я просто потратил полчаса, пытаясь найти ответ сам без успеха, поэтому я решил разместить его здесь для всех, кто застрял … особенно если вы пытаетесь ПОКАЗАТЬ строка состояния и ваше представление заканчивается перекрытием)

Я нашел, что это работает, если вы хотите СКРЫТЬ строку состояния …

 [[UIApplication sharedApplication] setStatusBarHidden:YES]; [self.view setFrame: [[UIScreen mainScreen] bounds]]; 

но не тогда, когда вы хотите ПОКАЗАТЬ строку состояния … в этом случае я использую это решение, которое работает, но меня беспокоит, потому что он жестко кодирует высоту строки состояния до 20 … меня также беспокоит, что мне нужно настроить вид по-разному в зависимости от ориентации. но если бы я этого не делал, у него всегда был разрыв в 20 пунктов на неправильном крае. В моем случае я хочу отключить индикатор состояния для некоторых просмотров, а затем вернуться, когда вернусь. У меня возникли особые проблемы, если я повернул устройство, когда панель была выключена. поэтому оператор switch, хотя и некрасивый (кто-то может опубликовать более чистое решение), работает.

 [[UIApplication sharedApplication] setStatusBarHidden:NO]; CGRect frame = [[UIScreen mainScreen] bounds]; switch (self.interfaceOrientation) { case UIInterfaceOrientationPortrait: frame.origin.y = 20; frame.size.height -= 20; break; case UIInterfaceOrientationPortraitUpsideDown: frame.origin.y = 0; frame.size.height -= 20; break; case UIInterfaceOrientationLandscapeLeft: frame.origin.x = 20; frame.size.width -= 20; break; case UIInterfaceOrientationLandscapeRight: frame.origin.x = 0; frame.size.width -= 20; break; } [self.view setFrame:frame]; 

Я предполагаю, что навигационная панель загружается до отображения строки состояния, поэтому позиция навигационной панели равна (0,0), которая затем перекрывается со строкой состояния (0,0). Вы можете просто переместить рамку навигационной панели (или настроить блок анимации) в viewDidLoad после вызова setStatusBarHidden:NO . Попробуйте сделать navigationBar.frame = CGRectMake(0,20,320,44); Строка состояния – 320×20, поэтому для этого нужно просто перемещать навигационную панель на 20.

Если у вас возникла эта проблема, потому что вы не показываете строку состояния при загрузке Default.png , а затем хотите отобразить строку состояния сразу после просмотра вашего первого контроллера просмотра, просто убедитесь, что вы поместили [[UIApplication sharedApplication] setStatusBarHidden:NO]; до [self.window makeKeyAndVisible]; в вашем AppDelegate.m . Это происходит так быстро, что вы никогда не увидите строку состояния на экране заставки.

 [[UIApplication sharedApplication] setStatusBarHidden:NO]; [self.window makeKeyAndVisible]; 

Вот что я делаю в своем корневом контроллере сейчас в iOS 5 после того, как я расскажу о статусной строке для анимации. Ужасно, но, похоже, это работает.

 CGRect rect; if ( self.interfaceOrientation == UIInterfaceOrientationPortrait ) rect = CGRectMake(0, 20, 320, 460); else if ( self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown ) rect = CGRectMake(0, 0, 320, 460); else if ( self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft ) rect = CGRectMake(20, 0, 300, 480); else rect = CGRectMake(0, 0, 300, 480); [UIView animateWithDuration:0.35 animations:^{ self.view.frame = rect; }]; 

в iOS 7 вы можете использовать:

 setNeedsStatusBarAppearanceUpdate 

например:

 [self.mainViewController.navigationController setNeedsStatusBarAppearanceUpdate]; 

apple docs:

Вызовите этот метод, если атрибуты панели состояния контроллера просмотра, такие как скрытый / незакрытый статус или стиль, изменяются. Если вы вызываете этот метод в блоке анимации, изменения будут анимированы вместе с остальной частью блока анимации.

используйте его только для iOS 7.

  • iOS: автоматическая компоновка и автоматизация масок - изменение размера всего представления?
  • Кнопка «Создать файл xib» также отключена
  • Xcode показывает старые, удаленные xib-файлы
  • Как использовать XIB в проекте iOS Swift
  • Что более эффективно? StoryBoard или XIB?
  • Просмотр изменения размера при изменении строки состояния In-Call
  • iOS Instagram Tags Text Layout? Как это делается?
  • Преобразование iPhone xib в iPad xib?
  • MainWindow.xib для ipad и iphone
  • xcode раскадровка - исключение из архива ibtoold
  • Почему мой XIB изменяется каждый раз, когда я открываю его в IB?
  • Interesting Posts

    Могу ли я посмотреть NSNotification из другого класса?

    Изменение маяков iOS в фоновом режиме

    Как отправить фоновое местоположение на сервер периодически, если изменение местоположения или отсутствие использования AFN 3?

    Каков наилучший способ распространения приложения iOS для клиентов?

    Контроллеры просмотров с подтверждением входа в Facebook

    Рисование горизонтальной линии в печатном формате pdf с использованием UIPrintPageRenderer

    Круглый вопрос в быстром

    UITextPosition в UITextField

    Создание тонированного UIImage из данного UIImage

    iOS, сравнивая два одинаковых NSDates, не возвращает NSOrderedSame

    Переключите переднюю / заднюю камеру с помощью AVCaptureSession

    Когда мне нужно установить свойство contentsScale CALayer?

    Слабая связь функции C

    запуск экрана xib не отображает изображение правильно

    Пустой кадр при слиянии видео с использованием AVMutableComposition

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.