webentwicklung-frage-antwort-db.com.de

tab-Leiste beim Push/Back ein-/ausblenden. schnell

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

 enter image description here

5
Pak Ho Cheung

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.

20
Nick Allen

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
    }
}
3
Shoaib

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)
0
nja