【问题标题】:iOS: Adding a search bar to the navigation bar in a master detail appiOS:在主从应用程序的导航栏中添加搜索栏
【发布时间】:2018-03-14 22:15:28
【问题描述】:

我做了什么?

我使用 Xcode 9 模板创建了一个通用的 Master-Detail 应用程序,在 Swift 中支持 Core Data。

我想要什么?

我想在详细信息的导航栏中添加一个搜索栏。

我是怎么做到的?

let searchController = UISearchController(searchResultsController: nil)
navigationItem.searchController = searchController

会发生什么? (实际问题)

搜索栏不会出现在详细信息的导航栏中。相反,导航栏失去了它的阴影线,当我回到主人时,搜索栏出现在导航中的动画时间然后消失。

仅当我在 iPhone 上运行代码时才会出现此问题,而不是在 iPad(或 iPhone 处于横向模式)上,其中拆分视图在左侧保存主视图,在右侧保存详细视图。

对我来说,导航栏似乎有问题,但我无法理解它。

您可以在 Github 上下载示例项目here

【问题讨论】:

    标签: ios swift uinavigationcontroller master-detail uisearchcontroller


    【解决方案1】:

    我已将其隔离到从表视图项到 {NavigationController-DetailViewController} 的 segue(种类 = Show Detail(例如 Replace)。该 segue 的工作是替换拆分视图中的详细视图控制器,或者以紧凑模式推送详细视图控制器。

    例如,如果撕掉 Show Detail (e.g. Replace) segue,并将表格视图单元格直接连接到 DetailViewController,使用“Show (e.g. Push)” segue 类型,UISearchBar 将按预期显示。

    对于这种情况,segue 显示视图控制器的方式似乎会影响搜索栏中的搜索控制器。设备之间的代码路径差异很大,这可以解释为什么它可以在 iPad 上运行。

    Apple 的开发者技术支持已确认这是 iOS 中的一个错误。

    一种廉价的解决方法是使用自定义 segue 手动执行自适应演示(推送或替换):

    class PushOrPresentSegue: UIStoryboardSegue
    {
        override func perform() {
            let splitVC = self.source.splitViewController
            let destVC = self.destination
            let nav = destVC as! UINavigationController
            let topVC = nav.topViewController
    
            if (splitVC?.traitCollection.horizontalSizeClass == .regular) {
                // Replace
                let splitViewControllerVCs = splitVC?.viewControllers
                splitVC?.viewControllers = [splitViewControllerVCs![0], destVC];
            }
            else
            {
                // Push
                let sourceVC = self.source
                sourceVC.navigationController?.pushViewController(topVC!, animated: true)
            }
        }
    
    }
    

    在 Storyboard 中,必须将 Master View Controller 的单元格与 Detail ViewContorller 的 Navigation Controller 之间的 segue 更改为:Kind = Custom, Class = PushOrPresentSegue

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2018-03-12
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多