【问题标题】:Disappearing UISearchController in a TableViewController that is in a UINavigationController在 UINavigationController 中的 TableViewController 中消失的 UISearchController
【发布时间】:2015-06-27 15:07:47
【问题描述】:

我制作了一个 UITableView 控制器,其中 UISearchBar 作为表格的标题。

然后我将此视图控制器嵌入到 UINavigationController 中,作为根视图控制器。

现在,当我点击搜索栏时,搜索栏似乎消失并显示一个白屏。出现键盘,但没有搜索栏。 表格视图可以滚动,但搜索栏消失了。

当我在没有导航控制器的情况下实现这个 UITableViewController 时,它可以完美运行。但是导航控制器的一些东西让一切都变得糟糕了。

【问题讨论】:

    标签: ios search uinavigationcontroller navigation uisearchbar


    【解决方案1】:

    我也遇到过有时会发生的相同问题,尤其是对于少量行(少于 50 行)的表格视图。 似乎 searchBar 已从视图层次结构中删除,确切地说是从 UISearchControllerView 的子容器视图中删除。

    我找到了一种解决方法,可以手动将搜索栏添加回 UISearchControllerView 容器子项的子视图。这是在委托函数中实现的(来自 UISearchControllerDelegate)didPresentSearchController:

    func didPresentSearchController(searchController: UISearchController) {
        if searchController.searchBar.superview == nil {
            for searchCtrlChildView in searchController.view.subviews {
                if searchCtrlChildView.frame.origin == CGPoint(x: 0, y: 0) { //Discriminate if by chance there was more than one subview
                    searchCtrlChildView.addSubview(searchController.searchBar)
                    break
                }
            }
        }
    }
    

    我还就此向 Apple 提交了一份雷达报告,因为它在 iOS 8.4 中未修复

    【讨论】:

    • 已经是iOS 9.3了,苹果还没有修复。但是感谢@Damien 的修复。就我而言,它不会在第一次激活时消失,因为我得到了这个self.extendedLayoutIncludesOpaqueBars = YES;。但是,在textField 中输入一些文本然后点击取消按钮以停用控制器后,再次激活它会以某种方式导致searchBar 自行解除连接。
    【解决方案2】:

    检查我在 viewDidLoad 中的 searchBar 方式

    我的 viewController 也嵌入到 NavigationController 中

    我的代码(希望有帮助):

    class myTableViewController: UITableViewController,UISearchResultsUpdating,UISearchControllerDelegate,UISearchBarDelegate
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.resultSearchController = ({
            let controller = UISearchController(searchResultsController: nil)
            controller.searchResultsUpdater = self
            controller.dimsBackgroundDuringPresentation = false
            controller.searchBar.sizeToFit()
            self.tableView.tableHeaderView = controller.searchBar
            return controller
        })()
    

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2016-03-06
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      相关资源
      最近更新 更多