使用UISearchController后缺少导航栏

时间:2018-03-29 08:35:23

标签: swift uicollectionview uinavigationbar uisearchbar

我有一个UICollectionViewController我正在显示工作正常的任务列表,最近我尝试在实施后UISearchBar实施TaskController,当我尝试启动时任何新的viewcontroller通过点击我TaskController内的行,新启动的视图控制器没有UINavigationBar所以我无法再次移回我的任务列表。请参阅以下TaskController任务列表: Image

在上面的屏幕截图中有一个星形图标,当用户点击它时,我启动了一个带有导航栏的视图控制器(注意: 我直接点击而没有过滤记录这就是为什么我可以在这里看到导航栏。)。 UIViewController UINavigationBar let taskSearchController = UISearchController(searchResultsController: nil) override func viewDidLoad() { super.viewDidLoad() //set taskSearchController taskSearchController.searchResultsUpdater = self taskSearchController.dimsBackgroundDuringPresentation = false navigationItem.searchController = taskSearchController getTaskList(){ } } Image

这是我用搜索栏过滤数据后点击星形图标时得到的结果。 navigation bar gone missing here 所以我不能回到任务列表控制器当我从下面更改一个标签并返回视图控制器被破坏,我得到一个带标签栏的黑屏。

以下代码我习惯实现有问题的搜索栏,请帮我解决。

func updateSearchResults(for searchController: UISearchController) {
    guard let searchText = searchController.searchBar.text, !searchText.isEmpty  else{

        self.taskList = self.originalTaskist
        collectionView?.reloadData()
        return
    }
    taskList = originalTaskist.filter({ task -> Bool in
            return task.name!.lowercased().contains(searchText.lowercased())
    })
    collectionView?.reloadData()
}

以下方法提供来自任务列表的过滤数据

test.test

1 个答案:

答案 0 :(得分:1)

override func viewDidLoad() {
    super.viewDidLoad()

    // This prevents the search bar to make trouble on pushed view controllers
    definesPresentationContext = true

    //...
}

definesPresentationContext = true放在显示搜索栏的View Controller内部(在您的情况下为UICollectionViewController

不幸的是,documentation不能很好地解释为什么这样做有效。 This blog post解释得更好。