升级我们的应用程序以支持iPhone X.如何在表格视图的标题中添加搜索栏并将其保存在安全区域内?以下是我们目前构建搜索栏的方式。
let searchController = UISearchController(searchResultsController: nil)
func buildSearchBar() {
self.searchController.searchResultsUpdater = self
self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = searchController.searchBar
self.definesPresentationContext = true
}
答案 0 :(得分:2)
在Building Apps for iPhone X视频中明确讨论了此主题。 (Designing for iPhone X也是一段很棒的视频。)
最重要的是,Apple建议使用导航控制器并在那里显示:
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
let ref = FIRDatabase.database().reference()
ref.child("users").observeSingleEvent(of: .value, with: { snapshot in
if let useri = snapshot.value as? [String : AnyObject] {
for (_, one) in useri {
let newUser = usera()
if let username = one["Username"] as? String {
if username.lowercased().contains((searchBar.text?.lowercased())!) {
if let name = one["Full Name"] as? String, let uid = one["uid"] as? String {
newUser.name = name
newUser.uid = uid
newUser.username = username
self.users.append(newUser)
}
}
}
}
}
self.tableViewSearchUser.reloadData()
})
}
(顺便说一句,即使没有导航控制器,let searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
if #available(iOS 11, *) {
navigationItem.searchController = searchController
searchController.isActive = true
} else {
present(searchController, animated: true)
}
- 搜索控制器,而不是将其设置为表头,也可以防止它滚出安全区域。)
答案 1 :(得分:1)
在安全区内"不清楚你的意思"。表格视图可以滚动,因此搜索栏不一定是"在"屏幕的任何部分;它可以在传感器区域后面向上滚动。
但是,您会注意到本机应用程序不会将搜索栏作为表格的标题。他们把它放在导航栏中。你也应该这样做。通过设置searchController
的{{1}}将搜索栏放入导航栏。