2017-10-29 1 views
0

Swiped Ich versuche, meine navBar zu verstecken, wenn geklaut und hat navigationController?.hidesBarsOnSwipe = true sowohl auf viewWillAppear() und viewDidLoad() umgesetzt, aber die navBar bleibt unhidden. In meinem Fall habe ich einen benutzerdefinierten segmentiertenController unterhalb der navBar implementiert, der zwischen zwei verschiedenen tableViewControllern schaltet.kann nicht NavBar verstecken, wenn

Ich bin mir nicht sicher, ob dies der Grund ist, warum sich die navBar nicht versteckt. Meine App sieht so aus und der Teil, den ich ausblenden möchte, ist der Teil 'Tickets'. enter image description here

Mein Code als solche:

class TicketsViewController: UIViewController { 

    var upcomingTableViewController: UpcomingTableViewController! 
    var pastTransactionTableViewController: PastTransactionsTableViewController! 

    let segmentedControllerView: SegmentedController = { 
     let sc = SegmentedController() 
     sc.translatesAutoresizingMaskIntoConstraints = false 
     sc.segmentedController.addTarget(self, action: #selector(segmentedControlValueChanged), for: .valueChanged) 
     sc.segmentedController.selectedSegmentIndex = 0 
     return sc 
    }() 

    let containerView: UIView = { 
     let v = UIView() 
     v.translatesAutoresizingMaskIntoConstraints = false 
     return v 
    }() 

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

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //These are the two tableViewControllers that are being toggled 
     upcomingTableViewController = UpcomingTableViewController() 
     pastTransactionTableViewController = PastTransactionsTableViewController() 

     setupNavigationBar() 
     setupViews() 
    } 

    @objc func segmentedControlValueChanged(_ sender: UISegmentedControl) { 
     let segmentedControl = sender 

     if segmentedControl.selectedSegmentIndex == 0 { 
      configureChildViewController(childController: upcomingTableViewController, onView: containerView) 
     } else { 
      configureChildViewController(childController: pastTransactionTableViewController, onView: containerView) 
     } 
    } 

    func setupNavigationBar() { 
     Helper.sharedInstance.setupNavigationBar(title: "Tickets", homeVC: self) 
     navigationController?.navigationBar.isTranslucent = false 
     navigationController?.navigationBar.shadowImage = UIImage() 
     navigationController?.hidesBarsOnSwipe = true 
     navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil) 
    } 

    func setupViews() { 

     view.addSubview(segmentedControllerView) 
     view.addSubview(containerView) 

     segmentedControllerView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
     segmentedControllerView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     segmentedControllerView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     segmentedControllerView.heightAnchor.constraint(equalToConstant: 44).isActive = true 

     containerView.topAnchor.constraint(equalTo: segmentedControllerView.bottomAnchor, constant: 0).isActive = true 
     containerView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
     containerView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true 
     containerView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 

     configureChildViewController(childController: upcomingTableViewController, onView: containerView) 

    } 

    func configureChildViewController(childController: UIViewController, onView: UIView?) { 
     var holderView = UIView() 

     if let onView = onView { 
      holderView = onView 
     } else { 
      holderView = self.view 
     } 

     addChildViewController(childController) 
     holderView.addSubview(childController.view) 
     constraintViewEqual(to: holderView, childControllerView: childController.view) 
     childController.didMove(toParentViewController: self) 
    } 


    func constraintViewEqual(to containerView: UIView, childControllerView: UIView) { 
     childControllerView.translatesAutoresizingMaskIntoConstraints = false 

     childControllerView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true 
     childControllerView.leftAnchor.constraint(equalTo: containerView.leftAnchor).isActive = true 
     childControllerView.rightAnchor.constraint(equalTo: containerView.rightAnchor).isActive = true 
     childControllerView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true 
    } 

} 

Der obige Code meine komplette Code für diese ticketsViewController ist. Schätze einige Ratschläge, warum die hideBarsWhenSwipe meine navBar nicht versteckt. Vielen Dank.

+0

Rufen Sie den Code 'navigationController? .hidesBarsOnSwipe = true' in' viewWillAppear' auf. – Mannopson

+0

@Mannopson Ich habe das versucht. Es hat auch nicht funktioniert. – Koh

Antwort

0

Versuchen Sie, das Element, das Sie unten haben, an die Höhe des View-Controllers anzupassen.

+0

Sie meinen die beiden TableViewControllers? oder die segmentierteControllerView? – Koh

+0

@Koh Sie könnten alle von ihnen verwenden, aber die Sache ist, dass die Summe muss die gleiche Höhe wie der View-Controller sein, die volle Größe abdecken. –