【问题标题】:UISearchController in navigation bar could not hide properly on iOS 11导航栏中的 UISearchController 在 iOS 11 上无法正确隐藏
【发布时间】:2017-10-26 10:28:10
【问题描述】:

我想在点击后隐藏导航栏

navigationController?.hidesBarsOnTap = true

导航栏在点击后正确隐藏

但是在添加了一个 searchController 之后(代码如下)

let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController

我的视图(青色)无法正确扩展

我也试过旋转它。出现搜索栏。

【问题讨论】:

    标签: ios uinavigationbar ios11 uisearchcontroller abcustomuinavcontroller


    【解决方案1】:

    终于找到了解决办法

    override func viewDidLoad() {
        super.viewDidLoad()
    
        navigationController?.barHideOnTapGestureRecognizer.addTarget(self, action: #selector(barHideAction(_:)))
        let searchController = UISearchController(searchResultsController: nil)
        navigationItem.searchController = searchController
        navigationItem.hidesSearchBarWhenScrolling = false
        navigationController?.hidesBarsOnTap = true
    }
    
    @objc func barHideAction(_ guesture: UITapGestureRecognizer) {
        updateFrame()
    }
    
    func updateFrame() {
        if let nc = navigationController {
            let isHidden = nc.isNavigationBarHidden
            searchController.searchBar.superview?.isHidden = isHidden
    
            if isHidden {
                self.additionalSafeAreaInsets.top = -64 // fixed by a magic num
            }
            else {
                self.additionalSafeAreaInsets.top = 0
            }
        }
    }
    

    example code

    【讨论】: