В iOS 7, как мне скрывать и показывать строку состояния "на лету" (когда захочу)
Говорите, что пользователь находится в контроллере просмотра и хочет войти в режим "полного экрана", когда строка состояния скрыта, в iOS 6 это был простой вызов метода, чтобы скрыть/показать строку состояния, но независимо от того, что он, похоже, сохраняется в iOS 7.
Я видел такие решения:
- (BOOL)prefersStatusBarHidden {
return YES;
}
Но это не позволяет переключать его во время выполнения. (Он не принимает никаких аргументов.)
В моем info.plist у меня View controller-based status bar appearance
установлено значение NO
.
Я в конце концов. Как скрыть его?
Ответы
Ответ 1
Ну вот один из способов сделать это:
в myViewController.h
@interface myViewController : UIViewController {
BOOL shouldHideStatusBar;
}
Затем в myViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
shouldHideStatusBar = YES;
}
- (BOOL)prefersStatusBarHidden {
return shouldHideStatusBar;
}
и скажем, когда я касаюсь экрана, он должен теперь показывать строку состояния. Вам нужно будет вызвать: setNeedsStatusBarAppearanceUpdate
специально для этого, а затем переключатель (bool в этом случае), чтобы показать/скрыть.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
shouldHideStatusBar = (shouldHideStatusBar)? NO: YES;
[self setNeedsStatusBarAppearanceUpdate];
}
setNeedsStatusBarAppearanceUpdate
Это нужно вызывать всякий раз, когда возвращаемые значения для представления Изменены атрибуты строки состояния контроллера. Если он вызывается из в блоке анимации изменения будут анимированы вместе с остальной части блока анимации.
prefersStatusBarHidden:
Возвращаемое значение Логическое значение YES указывает, что строка состояния должна быть скрытый. Значение по умолчанию: NO.
Обсуждение Если вы измените возвращаемое значение для этого метода, вызовите setNeedsStatusBarAppearanceUpdate.
Чтобы указать, что контроллер дочернего представления должен контролировать предпочтительные строка состояния скрытое/незакрытое состояние, реализовать childViewControllerForStatusBarHidden.
Если вы планируете приложение, работающее с iOS 6, возможно, захотите посмотреть этот пост
Ответ 2
У меня возникли проблемы с некоторыми другими ответами в iOS 8, поэтому я сделал немного больше исследований и нашел: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
. Затем вы можете включить/отключить анимацию.
Ответ 3
Рекомендация
Для поддержки iOS7 я предлагаю вам вернуться к представлению статуса панели управления View на YES. Это позволит вам контролировать строки состояния в коде. Руководство по переходу iOS (ссылка) предоставляет другие варианты управления внешним видом строки состояния (здесь есть не только одно исправление, но и ряд настроек что обеспечит вам то, что вы хотите). Также имейте в виду, что даже если вы установите внешний вид в коде, вы захотите обновить свои раскадровки или файлы nib, чтобы они соответствовали вашему стандарту (в противном случае вы можете временно увидеть флэшку состояния в зависимости от того, где вы устанавливаете код для обновления строки состояния), Я бы рекомендовал вам установить код перед представлением.
После установки свойства plist в значение YES: убедитесь, что этот метод существует в UIViewController, где вы хотите, чтобы строка состояния исчезла:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
Отображение строки состояния
Возврат Нет, если вы хотите, чтобы строка состояния отображалась в каждом из ваших контроллеров просмотров.
Может быть несколько других проблем со строкой состояния:
Альтернативный подход
В соответствии с Apple Documentation вы можете использовать другой метод управления строкой состояния, используя метод UIApplication, указанный в ссылке ниже (ссылка), setStatusBarHidden по-прежнему остается жизнеспособным при использовании этого подхода.
![Option #2]()
Эта опция позволит вам продолжать использовать свойства класса UIApplication, если вы следуете настройке plist выше.
![UIApplication Status]()
Образцы
Вы можете найти примеры кода альтернативного варианта строки состояния, упомянутого выше, в:
Ответ 4
Если контроллер представления, который находится на экране, является контроллером корневого представления, тогда вы должны просто реализовать функцию
- (BOOL)prefersStatusBarHidden {
return _showStatusBar;
}
с _showStatusBar
является BOOL
, тогда всякий раз, когда вы меняете этот вызов свойства [self setNeedsStatusBarAppearanceUpdate]
Если контроллер просмотра удерживается внутри чего-то другого, то есть UINavigationController
, тогда вам нужно сначала реализовать метод - (UIViewController *)childViewControllerForStatusBarHidden
в родительском контроллере и вернуть текущий экземпляр контроллера представления.
Это все с View controller-based status bar appearance
, установленным на YES
Ответ 5
Я думаю, что это будет работать под итоговой страницей вашего приложения, иначе ответьте мне
![enter image description here]()
видимость --- установите флажок