【问题标题】: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