【问题标题】:navigationbar missing after using UISearchController使用 UISearchController 后导航栏丢失
【发布时间】:2018-03-29 08:35:23
【问题描述】:

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

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

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

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

 let taskSearchController = UISearchController(searchResultsController: nil)

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

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

    }
}

以下方法给出了来自任务列表的过滤数据

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

【问题讨论】:

  • self.navigationController?.isNavigationBarHidden = true 你可以用它来显示导航
  • 您正在使用导航栏作为搜索视图。完成搜索方法后,您可以使用上面的注释代码取消隐藏导航栏。
  • 找到了我们需要在viewdidLoadMethod 解决方案中设置definesPresentationContext = true 的解决方案,该解决方案可在here 获得,其中显示“将视图控制器上的definePresentationContext 设置为true,确保搜索如果用户在 UISearchController 处于活动状态时导航到另一个视图控制器,则 bar 不会保留在屏幕上。"

标签: swift uicollectionview uinavigationbar uisearchbar


【解决方案1】:
override func viewDidLoad() {
    super.viewDidLoad()

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

    //...
}

definesPresentationContext = true 放在显示搜索栏的视图控制器中(在您的情况下为UICollectionViewController

不幸的是,documentation 没有很好地解释为什么这是有效的。 This blog post 解释得好一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多