it-swarm.com.ru

В iOS 7 как скрыть и показать строку состояния на лету (когда я этого захочу)

Допустим, пользователь находится в View Controller и хочет войти в режим «полного экрана», где строка состояния скрыта, в iOS 6 это был простой вызов метода, чтобы скрыть/показать строку состояния, но независимо от того, что кажется сохраняться под iOS 7.

Я видел такие решения:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Но это не позволяет переключаться во время выполнения. (Он не принимает никаких аргументов.)

В моем info.plist у меня View controller-based status bar appearance установлен на NO.

Я в конце концов. Как мне это скрыть?

26
Doug Smith

Swift 4

шоу:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = false

скрывать:

(UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow)?.isHidden = true



Objective-c

Ну вот один из способов сделать это:

в 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 указывает, что строка состояния должна быть скрытый. Значением по умолчанию является НЕТ.

Обсуждение Если вы измените возвращаемое значение для этого метода, вызовите Метод setNeedsStatusBarAppearanceUpdate.

Чтобы указать, что дочерний контроллер представления должен управлять предпочтительным Строка состояния скрытого/невидимого состояния, реализуйте Метод childViewControllerForStatusBarHidden.


Если вы планируете, чтобы ваше приложение работало с iOS 6, возможно, захотите взглянуть на этот пост

74
John Riselvato

У меня были проблемы с некоторыми другими ответами в iOS 8, поэтому я провел небольшое исследование и обнаружил: [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];. Затем вы можете включить/отключить анимацию.

3
Johann Burgess

Рекомендация

Для поддержки iOS7 я бы предложил вам вернуться к появлению строки состояния View на основе контроллера в YES. Это позволит вам контролировать строки состояния в коде. Руководство по переходу с iOS ( link ) предоставляет другие опции для управления внешним видом строки состояния (здесь не только одно исправление, но и ряд настроек, которые обеспечат то, что вы хотите). Также имейте в виду, что даже если вы установите внешний вид в коде, вы захотите обновить раскадровки или файлы перьев, чтобы они соответствовали вашему внешнему виду по умолчанию (в противном случае строка состояния может временно мигать в зависимости от того, где вы установили код для обновления строки состояния) , Я бы порекомендовал установить код до появления представления.

После установки для свойства plist значения YES: убедитесь, что этот метод существует в UIViewController, где вы хотите, чтобы строка состояния исчезла:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Отображение строки состояния

Вернитесь Нет, если вы хотите, чтобы строка состояния отображалась в каждом из ваших контроллеров представления.

Там может быть ряд других проблем, связанных со строкой состояния:

Альтернативный подход

Согласно документации Apple, вы можете использовать другой метод управления строкой состояния, используя метод UIApplication, указанный в приведенной ниже ссылке ( ссылка ). setStatusBarHidden все еще жизнеспособен при использовании этого подхода.

Option #2

Эта опция позволит вам продолжать использовать свойства класса UIApplication, если вы будете следовать настройке plist выше.

UIApplication Status

Образцы

Вы можете найти примеры кода альтернативной опции строки состояния, упомянутой выше в:

2
Tommie C.

Если контроллер представления, который находится на экране, является корневым контроллером представления, то вы должны просто иметь возможность реализовать функцию 

- (BOOL)prefersStatusBarHidden {
    return _showStatusBar;
}

с _showStatusBar, являющимся BOOL, тогда всякий раз, когда вы меняете это свойство, вызывайте [self setNeedsStatusBarAppearanceUpdate]

Если контроллер представления удерживается внутри чего-то другого, например, UINavigationController, тогда вам нужно сначала реализовать метод - (UIViewController *)childViewControllerForStatusBarHidden на родительском контроллере и вернуть текущий представленный экземпляр контроллера представления.

Это все с View controller-based status bar appearance, установленным в YES

0
Evan