iphone x:将搜索栏保持在安全区域内

时间:2017-09-15 20:03:19

标签: ios uitableview uisearchcontroller ios11 iphone-x

升级我们的应用程序以支持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
}

2 个答案:

答案 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}}将搜索栏放入导航栏。