在搜索栏上键入会破坏布局
Posted
技术标签:
【中文标题】在搜索栏上键入会破坏布局【英文标题】:Typing on search bar breaks layout 【发布时间】:2018-09-10 09:10:22 【问题描述】:我有一个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 之间出现了空白:
当导航栏大小发生变化时,如何改进我的约束以在 tableView 上上下移动?
【问题讨论】:
【参考方案1】:您必须更改 tableview 的顶部约束。 尝试替换这 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)
【讨论】:
对不起,打错了!我忘了从问题中删除searchBar
锚。我已经更新了我的问题,但问题就在那里。而且我有前导和尾随约束。请将代码向右滚动
对不起。这是我的错!请再看看我的问题。提前致谢!
抱歉,我无法重现您的问题,由于您的限制,当点击搜索栏时,tableview 内容会向上移动。请在此处或 GitHub 上发布可验证的示例。以上是关于在搜索栏上键入会破坏布局的主要内容,如果未能解决你的问题,请参考以下文章
解散 UIImagePickerController 会破坏父布局
UITabbarController 隐藏标签栏破坏了安全区域布局
在 iOS 7 上,在 viewDidLoad 中设置图层变换会破坏自动布局