在搜索栏上键入将中断布局

时间:2018-09-10 09:10:22

标签: ios swift uinavigationbar uisearchbar

我有一个tableView:

tableView = UITableView()
view.addSubview(tableView)

tableView.translatesAutoresizingMaskIntoConstraints = false
let constraints = [tableView.topAnchor.constraint(equalTo: view.topAnchor), tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor), tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor), tableView.heightAnchor.constraint(equalToConstant: view.frame.height * 0.6)]
NSLayoutConstraint.activate(constraints)

我的searchController看起来像:

func setupSearchController() {
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search for a candy"
    navigationItem.searchController = searchController
    definesPresentationContext = true
}

第一次加载时一切正常。但是,当我点击搜索栏以在其中键入内容时,搜索栏会移至顶部,导航栏会变小,这会破坏我的布局,并且tableView和searchBar之间会出现空白:

enter image description here

更改导航栏大小后,如何改善我在tableView上下移动的约束?

1 个答案:

答案 0 :(得分:0)

您必须更改表格视图的主要约束。 尝试替换这2个约束

tableView.topAnchor.constraint(equalTo: searchController.searchBar.bottomAnchor), 
tableView.topAnchor.constraint(equalTo: view.topAnchor)

有了这个

tableView.topAnchor.constraint(equalTo: view.topAnchor)

自动进行内容插入调整将完成其余工作。

还请注意,在表格视图约束列表中,您没有前/水平位置约束。我建议也添加此约束

tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor)