Как программно скрыть строку состояния в iOS 7?

Как в ios7 скрыть statusbar программно? Я использую XCode 4.6.1 (ios6.1) и я хочу реализовать это в самом XCode.


person Magesh    schedule 28.09.2013    source источник


Ответы (12)


в iOS7 вы должны реализовать в своем viewController

- (BOOL)prefersStatusBarHidden {
    return YES;
}
person Nicolas Manzini    schedule 28.09.2013

вы можете скрыть строку состояния, чтобы установить значение ключа «Просмотр внешнего вида строки состояния на основе контроллера» НЕТ в plist. Это самый простой способ.

или Вы можете скрыть в коде, используя свойство statusBarHidden класса UIApplication.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Свифт 3.0

Скрыть строку состояния для любого конкретного контроллера представления

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

Скрыть статус в приложении

UIApplication.shared.isStatusBarHidden = true

и установите значение ключа «Просмотр внешнего вида строки состояния на основе контроллера» НЕТ в информационном списке проекта.

person Anand Mishra    schedule 28.09.2013
comment
Это не работает на iOS 7. Правильный ответ от @user2826529 - person Vibhor Goyal; 11.10.2013
comment
Работает на меня. Убедитесь, что вы правильно установили свойство, которое он упоминает в plist. - person groomsy; 11.01.2014
comment
Далеко лучшее решение. Забудьте обо всем вышеперечисленном. Apple сделала это слишком сложным. - person Teddy; 19.04.2015
comment
Код переопределения отлично работает в iOS 13, Xcode 11.3, Swift 5. UIApplication.shared.isStatusBarHidden устарел. - person Wayne Henderson; 23.06.2020

Чтобы скрыть для определенного ViewController (а затем снова включить), когда View controller-based status bar appearance установлено на NO:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
}

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
}
person capikaw    schedule 01.06.2014

Если вам нужно динамически скрыть/показать его на данном контроллере представления, вы можете сделать что-то вроде этого.

(Хотя я рекомендую просто использовать - (BOOL)prefersStatusBarHidden, чтобы вернуть ваши предпочтения, если вам не нужно их менять.)

// view controller header 
@interface MyViewController : UIViewController  {
    BOOL shouldHideStatusBar;
}
@end


@implementation

- (BOOL)prefersStatusBarHidden {
    return shouldHideStatusBar; // backed by your instance variable
}

- (void)setPrefersStatusBarHidden:(BOOL)hidden {
    shouldHideStatusBar = hidden;

    // Don't call this on iOS 6 or it will crash since the 
    // `setNeedsStatusBarAppearanceUpdate` method doesn't exist
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

    // [self setNeedsStatusBarAppearanceUpdate]; // (if Xcode 5, use this)
}

@end
person zekel    schedule 02.01.2014

В случае iOS >= 7.0 используйте следующий код:

Синтаксис:

// Present in UIViewController of UIKit Frameworks
- (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO

Применение:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

В iOS ‹ 7.0 используйте следующий код:

Синтаксис:

// Present in UIApplication of UIKit Frameworks
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Применение:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
person Jayprakash Dubey    schedule 07.02.2014

Свифт 4.1

шаг 1. Установите для View controller-based status bar appearance в info.plist значение ДА.

Шаг 2. Введите код в UIViewController, строка состояния скроется, когда вы представите UIViewController.

private var statusBarIsHidden = false

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    statusBarIsHidden = true
    setNeedsStatusBarAppearanceUpdate()
}
override var prefersStatusBarHidden: Bool {
    return statusBarStatus
}
person alex02rt    schedule 23.08.2018

Попробуй это

[[UIApplication sharedApplication] setStatusBarHidden:YES];
person Muhammad Aamir Ali    schedule 07.03.2014

Если кому-то нужен самый обновленный способ сделать это (Swift 2.1 и последний Xcode 7.2)

  1. Установите для параметра «Просмотр внешнего вида строки состояния на основе контроллера значение NO в вашем info.plist».

  2. UIApplication.sharedApplication().statusBarHidden = true // помещаем куда-нибудь внутрь делегата приложения (applicationWill или DidFinishLaunchingWithOptions:

person adam88labs    schedule 18.12.2015

Мой опыт показывает, что вам нужен как код, так и значение в файле info.plist в iOS 9/Xcode 7.3.

Добавьте это в свой метод viewDidLoad.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Добавьте это в свой файл info.plist как логическое значение и установите для него значение NO:

View controller-based status bar appearance
person Philip Borges    schedule 19.08.2016

При использовании iOS 9.0+ и Swift. Если вы хотите, чтобы строка состояния была скрыта в некоторых контроллерах представления, но не во всех, убедитесь, что значение View controller-based status bar appearance в Info.plist установлено на YES, иначе одни и те же параметры будут использоваться во всех контроллерах представления.

И переопределить prefersStatusBarHidden в подклассе UIViewController

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

Аналогично можно сделать, чтобы изменить preferredStatusBarStyle

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return .lightContent
    }
}
person esesmuedgars    schedule 21.03.2018

на быстром 4:

    UIApplication.shared.isStatusBarHidden = ..true/false
person ingconti    schedule 22.03.2018
comment
Сеттер для isStatusBarHidden устарел в iOS 9.0: используйте -[UIViewController предпочитаетStatusBarHidden] - person Abdullah Umer; 31.05.2019

person    schedule
comment
Это не сработало для меня. Я использовал это же, но всегда отображалась строка состояния. Пожалуйста помоги.. - person Magesh; 01.10.2013
comment
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; Это будет работать, и в info.plist есть свойство, в котором вы можете скрыть строку состояния. - person user2826529; 08.10.2013
comment
После скрытия строки состояния, как ее снова показать? Потому что я хочу программно изменить видимый статус строки состояния. - person echo; 21.10.2013
comment
Нет необходимости выполнять селектор. - person Andras Hatvani; 01.11.2013
comment
@AndrasHatvani Вопрос указан с использованием Xcode 4, что означает, что у него нет API iOS 7. Он использует PerformSelector, чтобы избежать предупреждения о том, что метод не найден. - person zekel; 03.01.2014
comment
@echo Смотрите мой ответ, если вам все еще нужно это сделать. - person zekel; 03.01.2014