我将UISearchController
searchBar添加到控制器'像这样看:self.view.addSubview(searchController.searchBar)
。功能完全正常,只有在选择了tableview行后,搜索栏会快速向下移动并从顶部重新出现。我尝试了以下几点,但没有一个成功:
tableView.tableHeaderView = searchController.searchBar
而不是直接添加到视图searchController.searchBar
添加到我拖动到控制器的单独视图中,为其设置约束。尝试裁剪以限制新创建的视图和searchBar。UINavigationViewController
并设置self.navigationItem.titleView = searchController.searchBar
。我定义了searchBar的框架,但仍然没有。Extend Edges
功能(在顶部栏等下方),但没有选择添加行(到viewDIdLoad
):
self.extendedLayoutIncludesOpaqueBars = true
self.definesPresentationContext = true
非常感谢任何帮助。
答案 0 :(得分:0)
如果您使用的是故事板,则可以通过选择视图控制器进行更改,并在属性检查器中取消选择“调整滚动视图插图”。
答案 1 :(得分:0)
在尝试了所有建议并通过互联网搜索后,我注意到UISearchController
实施的工作示例已在UITableViewController
中完成,但我UIViewController
{它上面有{1}}和UITableViewDataSource
个协议。不幸的是,由于应用程序架构,我无法直接使用UITableViewDelegate
,因此我需要重新构建应用程序,以便UITableViewController
将UINavigationController
嵌入searchBar
中navigationItem.titleView
(并且不像它们在各种教程中那样设置为tableView.tableHeaderView
,因为我需要修复searchBar
,而不是在我们滚动时隐藏)并且它有效。以下是最终工作应用程序架构的外观:
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.1
和Swift 2.3
中的错误只需更改架构,因此可以在应用中使用UITableViewController
并使用UIViewController
代替{{1}} }}