gpt4 book ai didi

swift - 使用 UISearchController 后导航栏丢失

转载 作者:可可西里 更新时间:2023-11-01 01:58:05 24 4
gpt4 key购买 nike

我有一个 UICollectionViewController,我在其中显示工作正常的任务列表,最近我尝试为我的 TaskController 实现一个 UISearchBar实现之后,当我尝试通过单击 TaskController 中的行来启动任何新的 viewcontroller 时,新启动的 View Controller 没有 UINavigationBar 所以我不能再回到我的任务列表。请参阅以下带有任务列表的 TaskController: Image

在上面的屏幕截图中,当用户点击它时有一个星形图标,我启动了以下具有导航栏的 View Controller (注意: 我直接点击而不过滤记录这就是为什么我可以在这里看到导航栏。)。 UIViewControllerUINavigationBar Image

这是我在使用搜索栏过滤数据后单击星形图标时得到的结果。 navigation bar gone missing here所以当我从下面更改选项卡并返回时,我也无法返回到任务列表 Controller , View Controller 被破坏并且我得到一个带有选项卡栏的黑屏。

以下我用来实现搜索栏的代码有问题请帮我解决。

 let taskSearchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
super.viewDidLoad()
//set taskSearchController

taskSearchController.searchResultsUpdater = self
taskSearchController.dimsBackgroundDuringPresentation = false
navigationItem.searchController = taskSearchController
getTaskList(){

}
}

下面的方法给出了从tasklist中过滤出来的数据

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()
}

最佳答案

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 对此做了更好的解释。

关于swift - 使用 UISearchController 后导航栏丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49551437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com