Swift UISearchController tableview 搜索结果滚动不会在键盘上方移动到最后一行

Posted

技术标签:

【中文标题】Swift UISearchController tableview 搜索结果滚动不会在键盘上方移动到最后一行【英文标题】:Swift UISearchController tableview search result scroll not moving above keyboard upto last row 【发布时间】:2019-11-28 10:57:40 【问题描述】:

在我的场景中,我将 Tableview 与 searchController 一起使用。 searchcontroller 将在单击搜索按钮后显示。在这里,一旦通过搜索结果列表时间搜索控制器,如果我滚动我的表格视图,它不会滚动到底部的最后一个“行”。我需要在keyboard 上方显示底行。我尝试了下面的代码,但没有工作。

按钮点击显示搜索控制器

@IBAction func Click_search(_ sender: Any) 
        searchController = UISearchController(searchResultsController: nil)
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.searchBar.keyboardType = UIKeyboardType.asciiCapable
        searchController.searchBar.placeholder = "Search"
         searchController.searchBar.backgroundColor =  UIColor.red
        searchController.searchBar.tintColor =  UIColor.white
        let cancelButtonAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
        UIBarButtonItem.appearance().setTitleTextAttributes(cancelButtonAttributes , for: .normal)
        searchController.dimsBackgroundDuringPresentation = false
        self.searchController.searchBar.delegate = self
        searchController.searchResultsUpdater = self
        present(searchController, animated: true, completion: nil)
    

ViewDidload 内部

  NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)

键盘隐藏和显示以调整 Tablview 高度

@objc private func keyboardWillShow(notification: NSNotification) 
        if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue 
            tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardSize.height + 25, right: 0)
        
    

    @objc private func keyboardWillHide(notification: NSNotification) 
        tableView.contentInset = .zero
    

【问题讨论】:

【参考方案1】:

试试这个代码。 您正在滚动 TableView。请尝试滚动您的超级视图。它会工作的。试着告诉我。

在 Click_search 操作中添加以下代码。

NotificationCenter.default.addObserver(self, selector: #selector(self.keyboard(notification:)), name: UIResponder.keyboardWillShowNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboard(notification:)), name: UIResponder.keyboardWillHideNotification, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboard(notification:)), name:UIResponder.keyboardWillChangeFrameNotification, object: nil)

调用此函数来检查并向上滚动您的 tableView。 //MARK:- 键盘检查

 @objc func keyboard(notification:Notification) 
        if notification.name == UIResponder.keyboardWillShowNotification ||  notification.name == UIResponder.keyboardWillChangeFrameNotification 
           self.view.frame.origin.y = -15
        else
            self.view.frame.origin.y = 0
        
    

【讨论】:

以上是关于Swift UISearchController tableview 搜索结果滚动不会在键盘上方移动到最后一行的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如何摆脱 UISearchController 中的这种深色背景?

过滤后的 didSelectRowAtIndexPath 索引路径 UISearchController - Swift

Swift 中的 UiSearchController 到 UiCollectionView

Swift Firebase UISearchController 索引超出范围

尝试在 Swift 5 中设置 UISearchController 的背景颜色

Swift - 使用UISearchController实现带搜索栏的表格