SearchController SearchBar从视图

时间:2016-12-05 16:58:04

标签: uisearchbar xcode8 ios10 uisearchcontroller

我正在使用Xcode 8(准确地说是版本8.1(8B62))为iOS 10开发,并且我正在尝试开发一个在{{{{{{{{{{{{{{{{ 1}}。我已经获得了初始布局,但是当我激活searchBar时,它会从我的视野中完全消失。

这是我的视图控制器的视图层次结构:

tableView

以下是它的样子:

initial layout

现在,问题。由于没有用于包含searchBar的{​​{1}}的界面生成器工具,我将View | |---- UISearchBar | |---- UITableView 以编程方式添加到我的视图控制器的界面中UISearchController { {1}}方法,我使用UISearchDisplayController替换我在故事板中使用的临时UISearchBar:

searchBar

当我运行应用并激活附加到viewDidLoad的{​​{1}}对象时,它会从视图中消失:

activated searchBar

searchController.searchBar也奇怪地转变,但我的主要焦点是让// attribute to store the searchController var searchController: UISearchController! // temporary searchBar from storyboard @IBOutlet weak var tempSearchBar: UISearchBar! ... override func viewDidLoad() { super.viewDidLoad() searchController = UISearchController(searchResultsController: nil) searchController.searchResultsUpdater = self searchController.searchBar.frame = tempSearchBar.frame tempSearchBar.removeFromSuperview() view.addSubview(searchController.searchBar) } 保持在视图中。我已经尝试了一些不同的东西来完成这项工作,但我没有运气。任何帮助深表感谢。我觉得这不应该难以实施。我可以使用searchBar对象做得很好,但是这些已被弃用,我试图成为一名优秀的程序员而不是使用它。

1 个答案:

答案 0 :(得分:0)

我和你有同样的问题。问题源于尝试手动设置searchBar的框架。你是否需要故事板中的临时搜索栏?

要解决此问题,请删除设置框架的代码,并将tableview从storyboard连接到代码:

override func viewDidLoad() {
super.viewDidLoad()

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
tableView.tableHeaderView = searchController.searchBar
}