Със Swift 5 и iOS 12, според вашите нужди, можете да изберете един от следните три кодови фрагмента, за да разрешите проблема си.
#1. Използване на UINavigationController
hidesBarsOnTap
свойство + UIViewController
prefersStatusBarHidden
и preferredStatusBarUpdateAnimation
свойства
От 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
prefersStatusBarHidden
и preferredStatusBarUpdateAnimation
свойства с UIButton
UINavigationController
има метод, наречен setNavigationBarHidden(_:animated:)
. setNavigationBarHidden(_:animated:)
има следната декларация:
func setNavigationBarHidden(_ hidden: Bool, animated: Bool)
Задава дали лентата за навигация да е скрита.
Следният код показва как да превключвате лентата на състоянието и лентата за навигация, като използвате setNavigationBarHidden(_:animated:)
с UIButton
, зададен в Storyboard и свързан към @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
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
}
}
- Уверете се, че
UIViewControllerBasedStatusBarAppearance
е зададено на true
в Info.plist на вашия проект, в противен случай предишните примерни кодове няма да работят.
- Вижте този отговор за подобен въпрос, ако трябва да се насочите към iOS 10.
person
Imanou Petit
schedule
09.10.2014