Подтвердить что ты не робот

Как скрыть строку состояния и панель навигации, когда устройство крана

Как скрыть строку состояния и панель навигации, когда я нажимаю на устройство, как фотографии в iphone? Я использовал

UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.Slide)

но он не работает.

Изменить. Я хотел бы скрыть и показать строку состояния и панель навигации, а не навсегда скрывать ее.

4b9b3361

Ответ 1

В Swift 5 и iOS 12, в зависимости от ваших потребностей, вы можете выбрать один из трех следующих фрагментов кода, чтобы решить вашу проблему.


# 1. Используя свойство UINavigationController свойство hidesBarsOnTap + UIViewController preferredStatusBarUpdateAnimation свойства prefersStatusBarHidden и prefersStatusBarHidden

Начиная с iOS 8, UINavigationController имеет свойство hidesBarsOnTap. hidesBarsOnTap имеет следующую декларацию:

var hidesBarsOnTap: Bool { get set }

Логическое значение, указывающее, разрешает ли контроллер навигации скрывать свои панели с помощью жеста касания.

Apple также заявляет о hidesBarsOnTap:

Когда значение этого свойства равно true, контроллер навигации переключает отображение и скрытие своей панели навигации и панели инструментов в ответ на необработанное касание в области содержимого. Значением по умолчанию этого свойства является false.

Следующий код показывает, как реализовать hidesBarsOnTap:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationController?.hidesBarsOnTap = true
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

# 2. Использование UINavigationController setNavigationBarHidden(_:animated:) метод + UIViewController preferredStatusBarUpdateAnimation свойства prefersStatusBarHidden и preferredStatusBarUpdateAnimation с UIButton

UINavigationController есть метод setNavigationBarHidden(_:animated:). setNavigationBarHidden(_:animated:) имеет следующее объявление:

func setNavigationBarHidden(_ hidden: Bool, animated: Bool)

Устанавливает, скрыта ли панель навигации.

В следующем коде показано, как переключать строку состояния и панель навигации с помощью setNavigationBarHidden(_:animated:) с UIButton установленным в раскадровке и связанным с @IBAction:

import UIKit

class ViewController: UIViewController {

    // Link this @IBAction to a 'UIButton'
    @IBAction func toggle(_ sender: UIButton) {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

# 3. Использование UINavigationController setNavigationBarHidden(_:animated:) метод + UIViewController preferredStatusBarUpdateAnimation свойства prefersStatusBarHidden и preferredStatusBarUpdateAnimation с UIGestureRecognizer

В качестве альтернативы предыдущему коду вы можете использовать setNavigationBarHidden(_:animated:) с UIGestureRecognizer вместо UIButton:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let gesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.toggle))
        view.isUserInteractionEnabled = true
        view.addGestureRecognizer(gesture)
    }

    @objc func toggle() {
        navigationController?.setNavigationBarHidden(navigationController?.isNavigationBarHidden == false, animated: true)
    }

    override var prefersStatusBarHidden: Bool {
        return navigationController?.isNavigationBarHidden == true
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return UIStatusBarAnimation.slide
    }

}

Посмотрите этот ответ для аналогичного вопроса, если вам нужно ориентироваться на iOS 10.

Ответ 2

В iOS 8 и выше вы можете просто использовать hidesBarsOnTap:

    navigationController?.hidesBarsOnTap = true