UISearchController解雇它的奇怪行为

时间:2017-01-06 05:13:32

标签: ios swift uisearchcontroller

我将UISearchController searchBar添加到控制器'像这样看:self.view.addSubview(searchController.searchBar)。功能完全正常,只有在选择了tableview行后,搜索栏会快速向下移动并从顶部重新出现。我尝试了以下几点,但没有一个成功:

  1. 设置tableView.tableHeaderView = searchController.searchBar而不是直接添加到视图
  2. searchController.searchBar添加到我拖动到控制器的单独视图中,为其设置约束。尝试裁剪以限制新创建的视图和searchBar。
  3. 将控制器嵌入UINavigationViewController并设置self.navigationItem.titleView = searchController.searchBar。我定义了searchBar的框架,但仍然没有。
  4. 尝试在故事板中使用Extend Edges功能(在顶部栏等下方),但没有选择
  5. 添加行(到viewDIdLoad):

    self.extendedLayoutIncludesOpaqueBars = true

    self.definesPresentationContext = true

  6. 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您使用的是故事板,则可以通过选择视图控制器进行更改,并在属性检查器中取消选择“调整滚动视图插图”。

答案 1 :(得分:0)

在尝试了所有建议并通过互联网搜索后,我注意到UISearchController实施的工作示例已在UITableViewController中完成,但我UIViewController {它上面有{1}}和UITableViewDataSource个协议。不幸的是,由于应用程序架构,我无法直接使用UITableViewDelegate,因此我需要重新构建应用程序,以便UITableViewControllerUINavigationController嵌入searchBarnavigationItem.titleView (并且不像它们在各种教程中那样设置为tableView.tableHeaderView,因为我需要修复searchBar,而不是在我们滚动时隐藏)并且它有效。以下是最终工作应用程序架构的外观:

enter image description here

TrainingContainerViewController有两个Container View,其中一个我们嵌入TrainingFilterTableViewController,显示自动完成功能的最终结果(点击自动完成行后)。另一个Container View嵌入UINavigationController(左侧),而TrainingSearchTableViewController则为其子级。

设置UISearchController及其searchBar的代码位于TrainingSearchTableViewController s' viewDidLoad并且如下:

override func viewDidLoad() {
    super.viewDidLoad()

    searchController.searchResultsUpdater = self
    searchController.hidesNavigationBarDuringPresentation = false
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.sizeToFit()
    searchController.delegate = self
    navigationItem.titleView = searchController.searchBar
    tableView.hidden = true

    ...
}

修复XCode 8.2.1Swift 2.3中的错误只需更改架构,因此可以在应用中使用UITableViewController并使用UIViewController代替{{1}} }}