Antwort: Verwenden Sie self.tabBarController? .TabBar.hidden anstelle von hidesBottomBarWhenPushed in jedem Ansichtscontroller, um zu verwalten, ob der Ansichtscontroller eine Registerkartenleiste anzeigen soll oder nicht.
override func viewWillAppear(animated: Bool) {
self.tabBarController?.tabBar.hidden = true/false
}
Ich will
ansichts-Controller 1: Tab-Leiste sollte angezeigt werden
ansichts-Controller 2: Tab-Leiste sollte angezeigt werden
view-Controller 3: Tab-Leiste sollte nicht angezeigt werden.
ansichts-Controller 4: Tab-Leiste sollte nicht angezeigt werden.
Ich hab geschrieben
// prepareForSegue in view controller 1,
let upcoming = segue.destinationViewController as! viewcontroller3
upcoming.hidesBottomBarWhenPushed = true
// in view controller 3,
func clickOnButton(button: UIButton) {
self.hidesBottomBarWhenPushed = false
self.performSegueWithIdentifier("viewController2", sender: self)
self.hidesBottomBarWhenPushed = true
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "viewController2" {
let upcoming = segue.destinationViewController as! viewController2
upcoming.hidesBottomBarWhenPushed = false
}
}
// prepareForSegue in view controller 2
let upcoming = segue.destinationViewController as! viewController4
upcoming.hidesBottomBarWhenPushed = true
wenn 1 -> 3 dann zurück zu 1, funktioniert.
wenn 1 -> 3 -> 2 dann zurück zu 3 und zurück zu 1, funktioniert.
wenn 2 -> 4, dann funktioniert wieder 2.
wenn 1 -> 3 -> 2 -> 4, dann zurück zu 2, wird die Tab-Leiste nicht angezeigt. Wundern, warum. Irgendwelche Vorschläge oder Erklärungen von hidesBottomBarWhenPushed, da es mich sehr verwirrt
Wie der Name schon sagt, wird mit hiddenBottomBarWhenPushed die untere Leiste nur ausgeblendet, wenn dies erforderlich ist. Die untere Leiste wird nicht ausgeblendet. Sie können dies tun, damit es funktioniert:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = true/false
}
oder einfach self.tabBarController?.tabBar.hidden = true/false
in prepareForSegue einfügen
Aber ich würde Ihnen nicht empfehlen, dies zu tun, da es seltsam wäre, wenn bottomBar plötzlich herausspringt, wird der Benutzer denken, sie kehren plötzlich zu rootViewController zurück, während sie es nicht sind.
Benutzer sollten immer wissen, wo sie sich in Ihrer App befinden und wie sie zum nächsten Ziel gelangen.
Fügen Sie diese Implementierung in ViewController hinzu, um die Tab-Leiste beim Pushen/Poppen auszublenden/anzuzeigen. Dies funktioniert auch für alle nächsten Push-View-Controller.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if wilmove {
hidesBottomBarWhenPushed = true
}
wilmove = false
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if wilmove {
hidesBottomBarWhenPushed = false
}
wilmove = false
}
var wilmove = false
override func willMove(toParentViewController parent: UIViewController?) {
super.willMove(toParentViewController: parent)
wilmove = true
if !isViewLoaded {
hidesBottomBarWhenPushed = true
}
}
Fügen Sie dem Zielansichts-Controller die Eigenschaft hidesBottomBarWhenPushed hinzu und setzen Sie sie auf true.
Beispiel mit Push VC mit Bezeichner:
let storyboard = UIStoryboard(name: STORYBOARD_NAME, bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: VC_IDENTIFIER) as! YourViewController
vc.hidesBottomBarWhenPushed = true
navigationController?.pushViewController(vc, animated: true)