添加约束programmaticaly使崩溃
问题描述:
我想添加programmaticaly几个constarints,当我从底部的新表视图滑动,但到目前为止,我不明白我做错了什么。在我的super view
我有map view
必须更改bottom constaint
为单击按钮时新的tableView
留出空间。添加约束programmaticaly使崩溃
Bacically我的表视图,我需要4个constaints:
- 顶部constaint到地图底部
- 底部constarint标签栏顶部constarint
- 领导和trailinf从超级视图
所有时间我碰到:
Impossible to set up layout with view hierarchy unprepared for constraint.
基于从设定限制:here
下面是一个代码:
@IBAction func test(_ sender: UIButton) {
let tableView = UITableView()
tableView.backgroundColor = UIColor.red
tableView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(tableView)
let topConstraint = NSLayoutConstraint(item: tableView, attribute: .top, relatedBy: .equal, toItem: self.mapView, attribute: .bottom, multiplier: 1, constant: 0)
let bottomConstraint = NSLayoutConstraint(item: tableView, attribute: .bottom, relatedBy: .equal, toItem: self.tabBarController?.tabBar, attribute: .top, multiplier: 1, constant: 0)
let leadingConstraint = NSLayoutConstraint(item: tableView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0)
let trailingConstraint = NSLayoutConstraint(item: tableView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0)
view.addConstraints([topConstraint, bottomConstraint, leadingConstraint, trailingConstraint])
// tableView.addConstraint(NSLayoutConstraint(item: tableView, attribute: .top, relatedBy: .equal, toItem: self.mapView, attribute: .bottom, multiplier: 1, constant: 0))
// tableView.addConstraint(NSLayoutConstraint(item: tableView, attribute: .bottom, relatedBy: .equal, toItem: self.tabBarController?.tabBar, attribute: .top, multiplier: 1, constant: 0))
// tableView.addConstraint(NSLayoutConstraint(item: tableView, attribute: .leading, relatedBy: .equal, toItem: self.view, attribute: .leading, multiplier: 1, constant: 0))
// tableView.addConstraint(NSLayoutConstraint(item: tableView, attribute: .trailing, relatedBy: .equal, toItem: self.view, attribute: .trailing, multiplier: 1, constant: 0))
self.view.layoutIfNeeded()
UIView.animate(withDuration: 0.5, animations: {
self.mapBottomConstaint.constant = 200
self.centerButtonBottomConstaint.constant = 208
self.view.layoutIfNeeded()
})
}
提前感谢!
答
您正在尝试为视图层次结构之外的视图设置约束。自动布局系统提供布局指南,帮助您将视图与导航栏和选项卡栏对齐。
在底部约束条件中,将self.tabBarController?.tabBar
替换为bottomLayoutGuide
。
作为一个侧面说明,新的布局语法(用于iOS 9+)使得更加容易,而不第三方库创建程序的限制:
let topConstraint = tableView.topAnchor.constraint(equalTo: mapView.bottomAnchor)
let bottomConstraint = tableView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor)
let leadingConstraint = tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor)
let trailingConstraint = tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
更多地用于创建方案限制here信息。
你为什么要提供表格视图?我认为这不是必需的。 –
@PremaJanoti你说得对,他们不是! – yerpy
现在工作吗? –