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.

  • Загрузка UIViewController "из" файла Nib
  • Разница между использованием xib и добавлением через код - iPhone
  • Как назначить делегат для UITextField после инициализации?
  • Xib не найден после локализации
  • ViewController_iPad.xib vs ViewController ~ ipad.xib
  • Ошибка подключения таблицыView к источнику данных в .XIB
  • Можно ли использовать IBDesignable с UICollectionViewCells и жить, чтобы сделать их в раскадровке?
  • Проблема с xib-файлами для iPad универсальная
  • Просмотр повторного использования для разных контроллеров Лучший способ
  • Добавление пользовательского subview (созданного в xib) к представлению контроллера представления. Что я делаю неправильно?
  • Выполнить код на экране запуска
  • Interesting Posts

    Каковы поддерживаемые языки с помощью AVSpeechSynthesizer?

    Facebook показывает диалоговое окно входа в систему вместо диалога запроса приложения

    «Ошибка компоновщика Apple Mach-O с кодом выхода 1»

    Производительность UILabel и CATextLayer

    Объединение двух файлов CAF

    «Леновая привязка символов не удалась: Символ не найден: __OSSwapInt16» на jailbroken iPhone при использовании команд gem

    iOS Safari не принимает стороннего cookie

    UINavigationBar: внешний вид работает, но не UINavigationBar: появлениеWhenContained in

    MobileSafari не отправит обратно Cookies, установленные с CORS

    «На странице есть одна или несколько ошибок». При подаче заявки

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

    Сохранение структуры папок Cocoa Pods

    Как изменить ограничения метки во время выполнения?

    Как я могу связать основные анимации для разных слоев один за другим?

    Как усечь содержимое UITextView в соответствии с уменьшенным размером?

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