Как скрыть строку состояния в приложении Swift iOS?

Я хочу удалить строку состояния в верхней части экрана.

Это не работает:

func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
        application.statusBarHidden = true
        return true
}

Я также пробовал:

func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    application.statusBarHidden = true
    controller.setNeedsStatusBarAppearanceUpdate()

    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "Hello World"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}

Ответ 1

Вы действительно должны реализовать prefersStatusBarHidden на своих контроллерах представления:

Свифт 3 и позже

override var prefersStatusBarHidden: Bool {
    return true
}

Ответ 2

  • Перейти в файл Info.plist
  • Наведите курсор на одну из этих строк и появится кнопка (+) и (-).
  • Нажмите кнопку "плюс", чтобы добавить новый ключ "Тип", начинающийся с капитала V, и автоматически первым выбором будет просмотр состояния строки на основе контроллера.
  • Добавьте это как КЛЮЧ.
  • Установите для VALUE значение "НЕТ"
  • Перейти к вам AppDelegate.swift
  • Добавьте код внутри метода

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
        application.statusBarHidden = true
        return true
    }
    

СДЕЛАНО! Запустите приложение и не увидите строку состояния!

Ответ 3

Swift 3

В Info.plist установите View controller-based status bar appearance в NO

И вызовите UIApplication.shared.isStatusBarHidden = true

Ответ 4

Если вы хотите скрыть и вернуть строку состояния при нажатии кнопки, в то время как во время представления и закрытия слайд-меню, всплывающих окон и т.д., То вы можете использовать этот метод: -

Чтобы скрыть строку состояния: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

Чтобы вернуть строку состояния: -

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 

Ответ 5

если вы предпочитаете визуальный подход, а не его кодирование, используйте этот метод: в info.plist

введите описание изображения здесь просто добавьте View controller-based status bar appearance в NO

и Status bar is initially hidden как YES

Ответ 6

 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true // for navigation bar hide
    UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}

Ответ 7

Обновление для iOS 10/Swift 3.0

Больше не функция, теперь свойство...

override var prefersStatusBarHidden: Bool {
    return true
}

Ответ 8

в Swift 3.x:

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = true
}

Ответ 9

Таким образом, проблема здесь не имеет ничего общего с Swift, но как выглядит состояние строки с iOS 7.

По умолчанию контроллеры просмотра индивидуально управляют появлением строки состояния, когда они находятся на экране. Если вы хотите использовать этот метод управления статусной строкой, вы можете переопределить следующие методы для любых контроллеров представлений, которые вы хотите изменить внешний вид:

prefersStatusBarHidden preferredStatusBarStyle preferredStatusBarAnimation,

В вашем случае вы просто реализуете prefersStatusBarHidden и возвращаете true.

Другим способом было бы управлять появлением строки состояния на уровне приложения. Кажется, это то, что вы на самом деле пытаетесь сделать (установив application.statusBarHidden).

Чтобы выполнить эту работу, вам нужно открыть файл приложения Info.plist и добавить ключ UIViewControllerBasedStatusBarAppearance и присвоить ему значение NO.

Ответ 10

Перейдите в ваш Info.plist и добавьте два ключа:

Go to your Info.plist and add two Keys:

Ответ 11

Я сам это понял. Я добавлю свое решение в качестве другого варианта.

extension UIViewController {
    func prefersStatusBarHidden() -> Bool {
        return true
    }
}

Ответ 12

Хорошо, так что это становится проблемой для меня, поскольку iOS 9 не поддерживает какой-либо метод, упомянутый здесь, например UIApplication.sharedApplication().statusBarHidden = true или

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)

и

override func prefersStatusBarHidden() -> Bool {
     return true
}

работает, но не предоставляет программируемого решения, где я могу изменить состояние. (statusBarHidden = true и statusBarHidden = false, как мы это делали ранее).

Решение этого безумия:

Добавив к prefersStatusBarHidden(), как показано ниже, вы можете программно управлять скрытием и отображением строки состояния без добавления параметра UIViewControllerBasedStatusBarAppearance в ваш info.plist:

var showStatusBar = true

override func prefersStatusBarHidden() -> Bool {
     if showStatusBar {
         return false
     }
     return true
}

private func showStatusBar(enabled: Bool) {
    showStatusBar = enabled
    prefersStatusBarHidden()
}

затем используйте его так же, как на вашем коде:

//Hide Status Bar
showStatusBar(false)

ИЛИ

//Show Status Bar
showStatusBar(true)

Ответ 13

в Swift 4.2 это свойство сейчас.

override var prefersStatusBarHidden: Bool {
    return true
}

Ответ 14

Просто добавьте, переопределяя метод или переменную prefersStatusBarHidden, View controller-based status bar appearance в Info.plist должен быть ДА, иначе переопределение не будет иметь эффекта

Ответ 15

В моем случае я искал строку состояния, чтобы скрывать/показывать по требованию; а не только когда изображение загружается или исчезает.

swift 3.x

//show status bar initially
var showStatusBar = true

//set the parameters
override var prefersStatusBarHidden: Bool {

    if showStatusBar == true {

        //does not prefer status bar hidden
        print("does not prefer status bar hidden")
        return false

    } else {

        //does prefer status bar hidden
        print("does prefer status bar hidden")
    return true

    }
}

//ex: hide status bar and call parameter function again whenever you want
        showStatusBar = false
        setNeedsStatusBarAppearanceUpdate()

Ответ 16

В вашем проекте General-> Развертывание Info-> Стиль строки состояния установите флажок Скрыть строку состояния. Примечание: - она скрывает строку состояния во всем приложении

Ответ 17

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

import UIKit

class ViewController: UIViewController {

private var hideStatusBar: Bool = false

override var prefersStatusBarHidden: Bool {
    return hideStatusBar
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return UIStatusBarAnimation.slide
}

override func viewDidLoad() {
    super.viewDidLoad()

    view.backgroundcolor = .white
    hideStatusBar = true

    UIView.animate(withDuration: 0.3) {
        self.setNeedsStatusBarAppearanceUpdate()
    }
}

Внимание: если вы установили ключ "Просмотр внешнего вида строки состояния на основе контроллера" на "NO" в вашем info.plist, приведенный выше код не будет работать. Вы должны установить ключ на "ДА" или удалить его из info.plist

Ответ 18

Swift 4

//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false

//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true

Ответ 19

Для Swift 4+ попробуйте следующий код (проверено на Swift 4.0, 4.1 - IOS 10, 11):

override var prefersStatusBarHidden: Bool { return true }

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // call this func to force preferredStatusBarStyle to be read again.
    setNeedsStatusBarAppearanceUpdate()
}

Ответ 20

Я использую Xcode 8.1 (8B62) с целевым значением развертывания, установленным в 10.1, и мне не повезло с вышеперечисленными опциями переопределения. Однако проверка опции "Скрыть строку состояния" в "Сведения о развертывании" сделала для меня трюк.

Проект > Общие сведения

Надеюсь, это поможет.

Ответ 21

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        application.isStatusBarHidden = true
        return true
    }

Ответ 22

Этот код можно использовать в ViewController Class scope

open override var prefersStatusBarHidden: Bool { return true }

Ответ 23

В разделе Project- > General- > Deployment info

Стиль панели состояния: -

только что отмеченная Скрыть панель состояния (iOS 10)

Ответ 24

Поздний ответ, но если вам нужно альтернативное решение, вы можете использовать это:

public func ShowStatusBar() {

    let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
    UIView.animate(withDuration: 0.3) {
        statusBarWindow?.alpha = 1
    }
}

public func HideStatusBar() {

    let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow
    UIView.animate(withDuration: 0.3) {
        statusBarWindow?.alpha = 0
    }
}

Ответ 25

Если вы представляете контроллер представления модально, попробуйте

viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true

Ответ 26

Swift 5: в главном контроллере представления или главном навигационном контроллере, если у вас есть,

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override var prefersStatusBarHidden: Bool {
        return false
    }

И "Просмотр внешнего вида строки состояния на основе контроллера" в plist должен быть ДА, иначе приведенный выше код вызываться не будет.

Если вы хотите скрыть строку состояния при запуске приложения, "строка состояния изначально скрыта" в plist должно быть ДА. Это может предотвратить искажение начального изображения при отображении дополнительной синей полосы в верхней части экрана.

Ответ 27

self.navigationController?.isNavigationBarHidden = true