it-swarm.com.ru

Как скрыть строку состояния в приложении 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
}
169
Jay

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

Swift 2

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

Swift 3 и позже

override var prefersStatusBarHidden: Bool {
    return true
}
397
drewag
  1. Перейти к файлу Info.plist
  2. Наведите указатель мыши на одну из этих строк, и появятся кнопки (+) и (-).
  3. Нажмите кнопку «плюс», чтобы добавить новый ключ. Введите начальный с заглавной буквы V, и автоматически первым выбором будет «Просмотр внешнего вида строки состояния на основе контроллера».
  4. Добавьте это как КЛЮЧ.
  5. Установите ЗНАЧЕНИЕ на «НЕТ»
  6. Перейти к вам AppDelegate.Swift
  7. Добавьте код внутри метода

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

СДЕЛАННЫЙ! Запустите ваше приложение и больше нет строки состояния!

95
nycdanie

Swift 3

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

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

68
Joseph Mark

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

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

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

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

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
35
Vincent Joy

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

 enter image description here просто добавьте View controller-based status bar appearance к NO

и Status bar is initially hidden как YES

31
Milad Masoodi

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

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

override var prefersStatusBarHidden: Bool {
    return true
}
27
atlwx
 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true // for navigation bar hide
    UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
25
Mohit tomar

в Swift 3.x:

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

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

 Go to your Info.plist and add two Keys:

12
janaz

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

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

prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarAnimation,

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

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

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

12
Dima

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

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

Итак, это стало проблемой для меня, так как 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)

OR

//Show Status Bar
showStatusBar(true)
4
CodeOverRide

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

3
Huanyan

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

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()
2
Felecia Genet

В вашем проекте General-> Deployment Info-> Style bar style Установите флажок Скрыть строку состояния Примечание: - она ​​скрывает строку состояния во всем приложении

2
Sweta Vani

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

override var prefersStatusBarHidden: Bool {
    return true
}
1
Rawand Saeed

Swift 4

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

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

Для 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()
}
1
Coder ACJHP

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

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 

1
andre_hold

В вашем проекте-> Общие-> Информация о развертывании 

Стиль строки состояния: -

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

0
V D Purohit

Вы можете использовать этот код в своей ViewControllerClassscope 

open override var prefersStatusBarHidden: Bool { return true }
0
Sajjad

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

viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
0
YannSteph

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

Проект> Общее

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

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