Sven Mäurer
Sven Mäurer

Reputation: 735

Reset hidesBarsOnSwipe in swift

Where and how do I have to reset hidesBarsOnSwipe? I set the option in a View Controller which I push and want to reset it for the View Controller which did the push. What I tried until now is setting hidesBarsOnSwipe to false in the viewDidDisappear and in the viewDidLoad of the pushing ViewController.

The Navigationbar is still disappearing.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if (!visiblePOIs.isEmpty) {
        let beaconInfo = visiblePOIs[indexPath.item]
        var controller = storyboard!.instantiateViewControllerWithIdentifier("DetailController")! as! DetailController
        controller.setup(beaconInfo)
        self.parentViewController!.navigationController?.pushViewController(controller, animated: true)
    }
}

DetailController

override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
    navigationController?.hidesBarsOnSwipe = true
    self.automaticallyAdjustsScrollViewInsets = false
}

Upvotes: 0

Views: 1668

Answers (2)

Albert Bori
Albert Bori

Reputation: 10012

I had your exact problem. Here's how I solved it. (You can adapt this based on your needs.)

class MyViewController: UITableViewController {            
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

        //Correct the nav bar state unwinding from segues
        self.navigationController?.hidesBarsOnSwipe = true
    }

    override func willMoveToParentViewController(parent: UIViewController?) {
        super.willMoveToParentViewController(parent)

        //Toggle the auto-hiding nav bar when this view gets added/removed from the nav controller
        self.navigationController?.hidesBarsOnSwipe = !self.navigationController!.hidesBarsOnSwipe
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        super.prepareForSegue(segue, sender: sender)

        //Reset the nav bar to visible when segueing to another view
        self.navigationController?.navigationBarHidden = false
        self.navigationController?.hidesBarsOnSwipe = false
    }
}

This approach allows you to limit the functionality of the auto-hiding feature to the desired view controller without adding code to all associated view controllers.

Upvotes: 1

Memon Irshad
Memon Irshad

Reputation: 972

next view controller write in viewDidload

First Vc

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.hidesBarsOnSwipe = true
}

Second VC
 override func viewWillAppear(animated: Bool) {
 super.viewWillAppear(animated)
 self.navigationController?.hidesBarsOnSwipe = false
 self.navigationController?.setNavigationBarHidden(false, animated:   true)
 }

I hope its works

Upvotes: 4

Related Questions