按下字母时iOS搜索栏关闭
Posted
技术标签:
【中文标题】按下字母时iOS搜索栏关闭【英文标题】:iOS Search bar closes when letter pressed 【发布时间】:2016-12-17 12:40:34 【问题描述】:我在 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) 按钮。
知道为什么吗?
附:在模拟器中工作得很好!但是在我的 iPhone SE 上是在做上面的事情!
【问题讨论】:
为什么不将搜索栏添加为 UITableviewHeader? @Dev_Tandel 因为当我向下滚动时它不会粘在 tableview 的顶部 【参考方案1】:删除标题的两个函数并将这些行添加到行上方的 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
现在我相信你会得到你想要的结果。
希望对你有帮助
【讨论】:
以上是关于按下字母时iOS搜索栏关闭的主要内容,如果未能解决你的问题,请参考以下文章