2017-10-29 2 views
0

스 와이프시 내비게이션 막대를 숨기려고하고 navigationController?.hidesBarsOnSwipe = trueviewWillAppear()viewDidLoad()에 구현했지만 navBar는 숨김 상태로 유지됩니다. 내 경우, 두 개의 다른 tableViewController 사이를 토글하는 navBar 아래에 customseedController를 구현했습니다.스 와이프했을 때 NavBar를 숨길 수 없습니다

이것이 왜 navBar가 숨기지 않는지 확실하지 않습니다. 내 앱이 이렇게 생겼고 숨길 부분은 '티켓'부분입니다. 같은 enter image description here

내 코드 :

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 
    } 

} 

위의 코드는이 ticketsViewController 내 전체 코드입니다. hideBarsWhenSwipe이 내 navBar를 숨기지 않고있는 이유에 대해 감사드립니다. 감사.

+0

'viewWillAppear' 내부에서이 코드를 'navigationController? .hidesBarsOnSwipe = true'라고 부릅니다. – Mannopson

+0

@Mannopson 나는 이것을 시도했다. 그것은 어느 쪽도 일하지 않았다. – Koh

답변

0

아래에있는 요소의 크기를 조정하여 뷰 컨트롤러 높이와 일치 시키십시오.

+0

두 개의 tableViewController를 의미합니까? 또는 segmentedControllerView? – Koh

+0

@ Koh 당신은 그 중 하나를 사용할 수 있지만, 전체는 뷰 컨트롤러와 같은 높이이어야하며 전체 크기를 포함해야합니다. –

관련 문제