ios - 以编程方式设置约束的问题 Swift
问题描述
我想放一个使用所有水平空间UISegmentedControl
的标题。UITableView
这是这样的:
我想使用所有空间,所以我想设置约束。我试过这个:
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
}
}
但是会出现以下错误:
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x600000a7cbc0 "UISegmentedControl:0x7fc4cf480b20.leading"> and <NSLayoutXAxisAnchor:0x600000a7c7c0 "UIView:0x7fc4cf5b3f70.leading"> because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'
解决方案
您需要在激活约束之前segmentedControl
添加headerView
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])
推荐阅读
- python - Pandas:根据另一列增加或重置计数
- python - 如何为模拟对象命名?
- c# - 如何在不使用 string.replace 的情况下用另一个字符替换一个字符?
- javascript - 如何让 webpack 只解析一次常见的第三个包
- php - Woocommerce - 我的帐户 - 添加付款方式不起作用
- android - 在android UI中显示当前数据而不刷新和延迟
- r - 两个数据库中元素频率的 ggplot2 条形图
- android - childEventListener 抛出 nullPointerException
- r - 重复应用不同的cols组合
- javascript - Vue Test Utils + 第三方组件:无法检测到输入事件