我对swift 3中的搜索栏有这个奇怪的问题。
所以我希望搜索栏能够粘贴到表格视图的顶部(不过将其放在故事板中) 我有以下代码。
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
searchController.searchBar.placeholder = "Search for Event Name or Category"
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return self.searchController.searchBar
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return searchController.searchBar.frame.height
}
因此,当我向上和向下滚动表格视图时,搜索栏仍然位于顶部。 当我按下搜索栏输入文本时,它会显示键盘和取消按钮。
如果我按下取消按钮,键盘会消失,这是正常的。
但是,如果我从键盘上按某些东西(比如说A
字母)
它过滤表视图并关闭键盘。它也不让我按取消或(x)按钮。
知道为什么吗?
P.S。在模拟器中工作得很好!但在我的iPhone SE中正在做上述事情!
答案 0 :(得分:2)
删除标题的两个函数,并在行上方的viewDidLoad中添加这些行。
searchController.hidesNavigationBarDuringPresentation = false
let tableHeaderView: UIView = UIView.init(frame: searchController.searchBar.frame)
tableHeaderView.addSubview(searchController.searchBar)
self.locationTable.tableHeaderView = tableHeaderView
然后也放了这个功能:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let searchBar:UISearchBar = searchController.searchBar
var searchBarFrame:CGRect = searchBar.frame
if searchController.isActive {
searchBarFrame.origin.y = 0
}
else {
searchBarFrame.origin.y = max(0, scrollView.contentOffset.y + scrollView.contentInset.top)
}
searchController.searchBar.frame = searchBarFrame
}
现在我相信你会得到你想要的结果。
希望有所帮助