Ios 以编程方式设置约束的问题
我想在使用所有水平空间的Ios 以编程方式设置约束的问题,ios,swift,uitableview,autolayout,constraints,Ios,Swift,Uitableview,Autolayout,Constraints,我想在使用所有水平空间的UITableView的标题中放置一个UISegmentedControl 这是这样的: 我想使用所有空间,所以我想设置约束。我试过这个: func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if section == 0 { let headerView = UIView(fra
UITableView
的标题中放置一个UISegmentedControl
这是这样的:
我想使用所有空间,所以我想设置约束。我试过这个:
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0 {
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height:
UITableViewAutomaticDimension))
headerView.backgroundColor = UIColor.white
segmentedControl.translatesAutoresizingMaskIntoConstraints = false
var constraint = NSLayoutConstraint(item: segmentedControl, attribute: .leading, relatedBy: .equal, toItem: headerView, attribute: .leading, multiplier: 1, constant: 0)
var constraint2 = NSLayoutConstraint(item: segmentedControl, attribute: .trailing, relatedBy: .equal, toItem: headerView, attribute: .trailing, multiplier: 1, constant: 0)
NSLayoutConstraint.activate([constraint,constraint2])
headerView.addSubview(segmentedControl)
return headerView
}
}
但出现以下错误:
***由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“无法使用锚激活约束,并且因为它们没有共同的祖先。”。约束或其锚定是否引用不同视图层次中的项?这是非法的。
在激活约束之前,您需要将分段控件
添加到标题视图
var constraint = NSLayoutConstraint(item: segmentedControl, attribute: .leading, relatedBy: .equal, toItem: headerView, attribute: .leading, multiplier: 1, constant: 0)
var constraint2 = NSLayoutConstraint(item: segmentedControl, attribute: .trailing, relatedBy: .equal, toItem: headerView, attribute: .trailing, multiplier: 1, constant: 0)
headerView.addSubview(segmentedControl)
NSLayoutConstraint.activate([constraint,constraint2])
在激活约束之前,需要将
分段控件
添加到头视图
var constraint = NSLayoutConstraint(item: segmentedControl, attribute: .leading, relatedBy: .equal, toItem: headerView, attribute: .leading, multiplier: 1, constant: 0)
var constraint2 = NSLayoutConstraint(item: segmentedControl, attribute: .trailing, relatedBy: .equal, toItem: headerView, attribute: .trailing, multiplier: 1, constant: 0)
headerView.addSubview(segmentedControl)
NSLayoutConstraint.activate([constraint,constraint2])
将segmentedControl添加到视图之前,需要设置约束。您应该首先将其添加到视图中,然后设置其约束在将segmentedControl添加到视图之前,您正在设置约束。您应该首先将其添加到视图中,然后设置其约束。这是可行的。我会接受的。但是当我把
10
举个例子,拖拉保持在窗外<代码>let constraint2=NSLayoutConstraint(项:分段控件,属性:。尾部,相关者:。相等,toItem:headerView,属性:。尾部,乘数:1,常数:10)段的最大X=头的最大X+10,因此,如果在视图中需要它,它应该是-10,这就是约束最终转换为trailing=max x的方式。这是有效的。我会接受的。但是当我把10
举个例子,拖拉保持在窗外let constraint2=NSLayoutConstraint(项:分段控制,属性:。拖尾,相关者:。相等,toItem:headerView,属性:。拖尾,乘数:1,常数:10)
max X of segment=max X of header+10,因此如果需要在视图中,它应该是-10,这就是约束最终转换为拖尾=max X的方式