我有一个UITableView,在其中我将它的标题设置为搜索栏。
tableView.tableHeaderView = searchController.searchBar
一切都按照计划工作,直到你点击它,它似乎脱离了tableView,并跳到屏幕顶部。tableView行保持不变。为什么它会在iOS 11而不是iOS 10中这样做呢?
发布于 2017-09-28 12:10:31
我们鼓励在iOS 11上应用新的方式来显示搜索栏/搜索控制器。以下是我所做的工作:
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
tableView.tableHeaderView = searchController.searchBar
}
发布于 2017-09-21 16:46:04
我在SO上的第一篇文章,我希望我这样做是对的。
我遇到了完全相同的问题,真的很难找到解决方案。但现在我已经设法通过将UISearchController
子类化来修复它。
这个子类有两个属性:
var customDelegate : CustomSearchControllerDelegate!
var searchBarWithCustomSize : UISearchBar!
因此,我现在可以不使用UISearchController的searchBar,而是使用来自我的自定义searchController的新属性searchBarWithCustomSize,如下所示:
tableView.tableHeaderView = customSearchController.searchBarWithCustomSize
这使得搜索栏在处于活动状态时行为正确。您还可以使用此searchBarWithCustomSize拥有更多自由,例如,如果需要,您可以更改其框架,依此类推。
在我的实现中,我需要委托知道搜索栏文本字段何时被更改,但我猜委托的使用取决于您的情况。
发布于 2017-10-09 05:31:07
我遇到了完全相同的问题--在iOS11上UISearchBar的奇怪跳跃行为,而在iOS10上一切正常。
关于上面西蒙·王的建议-我遇到的问题是我没有在UIViewController
中定义我的UISearchBar
,而是在另一个UITableViewCell
中-因此我无法访问navigationItem
,也不能以这种方式显示我的搜索栏。
无论如何,在经过多次尝试和错误之后,我能让事情正常工作的唯一方法就是完全清除UISearchController
和相关的委托。
相反,我定义了一个UISearchBar
内部接口生成器,并适当地定义了它的布局约束。然后,我让它的父类符合UISearchBarDelegate
并执行searchBar.delegate = self
然后,我添加了一组委托方法来捕获搜索栏中的内容更改,并相应地更新我的表格结果:
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
filterContentForSearchText(self.searchBar.text!)
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
filterContentForSearchText(self.searchBar.text!)
self.searchBar.resignFirstResponder()
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filterContentForSearchText(self.searchBar.text!)
}
生活又变得美好了。希望这能有所帮助!
https://stackoverflow.com/questions/45798923
复制相似问题