Ответ 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.