Изменение рамки строки состояния без уведомления

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

Вот как я регистрирую уведомление:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillChangeStatusBarFrameNotification:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; 

В некоторых местах нашего приложения мы показываем / скрываем строку состояния:

 [[UIApplication sharedApplication] setStatusBarHidden:maximize withAnimation:UIStatusBarAnimationSlide]; 

Но он также может изменять размер, когда включена личная точка доступа или когда вы звоните по телефону. Есть ли способ получить фактическую рамку строки состояния при ее изменении?

Этот вопрос подразумевает, что уведомления не работают из-за ошибки SDK, по крайней мере, для изменений ориентации. Это причина? Есть ли обходной путь?

Я знаю, что этот вопрос был опубликован некоторое время назад, но эта проблема раздражает! UIApplicationWillChangeStatusBarFrameNotification и UIApplicationDidChangeStatusBarFrameNotification только изменения ориентации и изменения высоты строки состояния вызова.

Я решил это, написав мою собственную функцию категории setStatusBarHidden, которую я использую вместо обычной функции UIApplication . К сожалению (как указывал @progrmr), поскольку высота строки состояния может составлять 20 пикселей или 40 пикселей (и мы не имеем представления о том, как будет выглядеть рамка скрытой строки состояния до тех пор, пока она не будет скрыта), мы можем только надежно скрыть одно уведомление с правильной пользовательской информацией ( UIApplicationDidChangeStatusBarFrameNotification ). Вот что я сделал:

 @implementation UIApplication (statusBar) - (void)setStatusBarHiddenWithNotification:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation { if (self.statusBarHidden == hidden) return; [self setStatusBarHidden:hidden withAnimation:animation]; [NSNotificationCenter.defaultCenter postNotificationName:UIApplicationDidChangeStatusBarFrameNotification object:nil userInfo:@{UIApplicationStatusBarFrameUserInfoKey: [NSValue valueWithCGRect:self.statusBarFrame]}]; } @end 

Это немного взломанно, но мне это нравится, потому что я могу использовать одного наблюдателя уведомлений, чтобы прослушивать как изменения состояния в строке состояния вызова, так и изменения в ручном setStatusBarHidden.

Надеюсь, это поможет кому-то!

  • Как изменить цвет панели состояния iOS в контроллере детского представления
  • iPhone: строка состояния перемещения HOWTO с жесткой ставкой
  • Индикатор загрузки в строке состояния iOS
  • iOS7 объединяет панель состояния и панель инструментов
  • Внешний вид UIStatusBar с несколькими окнами
  • Как предотвратить UINavigationBar от покрытия верхней части окна в iOS 7?
  • хотите выполнить меню раздвижных боковых панелей со скользящей строкой состояния. в iOS
  • Строка состояния iPhone6, показывающая увеличенное приложение, но не на главном экране
  • UIStatusBarStyleLightContent Не устанавливать батарею белого цвета?
  • Скрытие строки состояния для приложения iPhone, работающего на iPad
  • UINavigationBar скрывается в statusBar
  • Interesting Posts

    UITableView endUpdates занимает очень много времени, когда обновления CoreData

    Множественные функции в методах сенсорной функции Sprite Kit

    Как установить и удалить свой UITableViewCell с помощью динамического идентификатора повторного использования?

    Симулятор iPhone понимает первое событие «click» jQuery, но не второе

    CGImageRelease в Swift

    Есть ли способ узнать, удаляет ли пользователь WKInterfaceMap?

    Быстрая необязательная привязка с кортежами

    Могу ли я поделиться шейдерами между контекстами с EAGLSharegroup?

    SenTestingKit / SenTestingKit.h не найден во время работы с Stripe

    NSString для float … что произойдет, если NSString не является числовым и содержит буквенно-цифровые символы?

    UITextInputMode.activeInputModes () сбой в Swift 2

    дублирующий символ во внешней структуре

    Как отменить In-App-Purchase, если мой сервер не отвечает и не может предоставить контент? (IOS)

    Что такое «Vary for Traits» в XCode 8?

    Вывод initWithFrame: self.view.frame 20-пиксельная (строка состояния) проблема раз и навсегда

    Давайте будем гением компьютера.