web-dev-qa-db-ja.com

プッシュ/バック時にタブバーを非表示/表示します。 swift

回答:各ビューコントローラでhidesBottomBarWhenPushedの代わりにself.tabBarController?.tabBar.hiddenを使用して、ビューコントローラがタブバーを表示するかどうかを管理します。

override func viewWillAppear(animated: Bool) {
    self.tabBarController?.tabBar.hidden = true/false
} 

が欲しいです

ビューコントローラー1:タブバーを表示する必要があります

ビューコントローラー2:タブバーを表示する必要があります

ビューコントローラー3:タブバーは表示されません。

ビューコントローラー4:タブバーは表示されません。

私が書いた

// 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

1-> 3の場合、1に戻ります。

1-> 3-> 2の場合、3に戻り、1に戻ると機能します。

2-> 4の場合、2に戻ります。

1-> 3-> 2-> 4の場合、2に戻ると、タブバーは表示されません。なぜだろう。 hidesBottomBarWhenPushedの提案や説明は、私を非常に混乱させます。

enter image description here

6
Pak Ho Cheung

名前が示すように、hiddenBottomBarWhenPushedは必要に応じてボトムバーのみを非表示にし、bottomBarを再表示しません。あなたはそれを機能させるためにこれを行うことができます:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.tabBar.hidden = true/false
} 

または単にself.tabBarController?.tabBar.hidden = true/false in prepareForSegue

しかし、bottomBarが突然ポップアウトされると奇妙になるので、そうすることはお勧めしません。ユーザーは、突然、rootViewControllerに戻ったと思います。

ユーザーは常にアプリのどこにいるか、次の目的地に行く方法を知っている必要があります。

27
Nick Allen

プッシュ/ポップ時にタブバーを非表示/表示するViewControllerにこの実装を追加します。また、次にプッシュされるすべての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

HidesBottomBarWhenPushedプロパティを宛先のビューコントローラーに追加し、trueに設定します。

プッシュの例VC with identifier:

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

これが私の2セントです。 Swift 3/4/5:

アプローチ1:(推奨)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "YourSegueIdentifier" {
        let destinationController = segue.destinationViewController as! YourViewController
        destinationController.hidesBottomBarWhenPushed = true // Does all the hide/show work.
    }
}

アプローチ2:

override func viewWillAppear(_ animated: Bool) { // As soon as vc appears
    super.viewWillAppear(true)
    self.tabBarController?.tabBar.isHidden = false
}

override func viewWillDisappear(_ animated: Bool) { // As soon as vc disappears
    super.viewWillDisappear(true)
    self.tabBarController?.tabBar.isHidden = true
}
2
Satnam Sync