ios - 滑动时无法隐藏导航栏

标签 ios swift uinavigationbar

我试图在滑动时隐藏我的导航栏,并在 viewWillAppear()viewDidLoad() 处实现了 navigationController?.hidesBarsOnSwipe = true > 但导航栏仍然不隐藏。就我而言,我在导航栏下方实现了一个自定义的分段 Controller ,它可以在两个不同的 tableViewController 之间切换。

我不确定这是否是导航栏不隐藏的原因。我的应用程序看起来像这样,我想隐藏的部分是“门票”部分。 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
    }

}

上面的代码是我这个ticketViewController的完整代码。感谢一些建议,为什么 hideBarsWhenSwipe 没有隐藏我的导航栏。谢谢。

最佳答案

尝试调整下面元素的大小以匹配 View Controller 的高度。

关于ios - 滑动时无法隐藏导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46997833/

相关文章:

ios - 在 iOS 中保持登录到 Google OAuth 2.0 服务

ios - 如何在 ios 中创建类似树结构的可扩展 TableView

swift - 子 uiviewcontroller 未加载到导航栏上

ios - 升级到 Xcode 6 Beta 7 现在得到 : the file info. plist 无法打开,因为没有这样的文件

ios - 构建失败的 jenkins iOS 没有错误

ios - UIScrollView 中的 subview 对齐错误

ios - 在 Swift 中组合两个数组以形成带有部分的表

swift - Xcode 8 不允许我编辑动态原型(prototype)单元?

ios - 在 iPhone X 模拟器的顶部和底部看到黑条

iphone - UIView 更改内部导航 View