按下字母时,iOS搜索栏会关闭

时间:2016-12-17 12:40:34

标签: ios swift swift3 uisearchbar uisearchcontroller

我对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中正在做上述事情!

1 个答案:

答案 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
    }

现在我相信你会得到你想要的结果。

希望有所帮助