为 UITableCellView 中的视图添加 NSLayoutConstraint
Add NSLayoutConstraint for a view inside a UITableCellView
我希望在我的 UITableCellView 中居中放置一个 UIButton。我在 tableView cellForRowAt 函数中添加了必要的代码,但出现错误:
视图层次结构未为约束准备:添加到视图时,约束的项目必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,这将崩溃。打断
-[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] 进行调试。
我的代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell = UITableViewCell(
style: .default, reuseIdentifier: Id.settingButtonCellIdentifier)
cell!.backgroundColor = UIColor.clear
cell!.preservesSuperviewLayoutMargins = false
cell!.separatorInset = UIEdgeInsets.zero
let button : UIButton = UIButton(type: UIButtonType.custom) as UIButton
button.backgroundColor = UIColor.red
button.setTitle("Click Me !", for: UIControlState.normal)
cell!.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.addConstraint(NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: cell!, attribute: .leading, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .trailing, relatedBy: .equal, toItem: cell!, attribute: .trailing, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .top, relatedBy: .equal, toItem: cell!, attribute: .top, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .bottom, relatedBy: .equal, toItem: cell!, attribute: .bottom, multiplier: 1, constant: 10))
}
return cell!
}
如有任何帮助,我们将不胜感激!
试试这个
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell = UITableViewCell(
style: .default, reuseIdentifier: Id.settingButtonCellIdentifier)
cell!.backgroundColor = UIColor.clear
cell!.preservesSuperviewLayoutMargins = false
cell!.separatorInset = UIEdgeInsets.zero
let button : UIButton = UIButton(type: UIButtonType.custom) as UIButton
button.backgroundColor = UIColor.red
button.setTitle("Click Me !", for: UIControlState.normal)
button.translatesAutoresizingMaskIntoConstraints = false
cell!.contentView.addSubview(button)
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: cell.contentView, attribute: .leading, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .trailing, relatedBy: .equal, toItem: cell.contentView, attribute: .trailing, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .top, relatedBy: .equal, toItem: cell.contentView, attribute: .top, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .bottom, relatedBy: .equal, toItem: cell.contentView, attribute: .bottom, multiplier: 1, constant: 10))
}
return cell!
}
我希望在我的 UITableCellView 中居中放置一个 UIButton。我在 tableView cellForRowAt 函数中添加了必要的代码,但出现错误:
视图层次结构未为约束准备:添加到视图时,约束的项目必须是该视图(或视图本身)的后代。如果在组装视图层次结构之前需要解决约束,这将崩溃。打断 -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] 进行调试。
我的代码如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell = UITableViewCell(
style: .default, reuseIdentifier: Id.settingButtonCellIdentifier)
cell!.backgroundColor = UIColor.clear
cell!.preservesSuperviewLayoutMargins = false
cell!.separatorInset = UIEdgeInsets.zero
let button : UIButton = UIButton(type: UIButtonType.custom) as UIButton
button.backgroundColor = UIColor.red
button.setTitle("Click Me !", for: UIControlState.normal)
cell!.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.addConstraint(NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: cell!, attribute: .leading, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .trailing, relatedBy: .equal, toItem: cell!, attribute: .trailing, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .top, relatedBy: .equal, toItem: cell!, attribute: .top, multiplier: 1, constant: 10))
button.addConstraint(NSLayoutConstraint(item: button, attribute: .bottom, relatedBy: .equal, toItem: cell!, attribute: .bottom, multiplier: 1, constant: 10))
}
return cell!
}
如有任何帮助,我们将不胜感激!
试试这个
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell = UITableViewCell(
style: .default, reuseIdentifier: Id.settingButtonCellIdentifier)
cell!.backgroundColor = UIColor.clear
cell!.preservesSuperviewLayoutMargins = false
cell!.separatorInset = UIEdgeInsets.zero
let button : UIButton = UIButton(type: UIButtonType.custom) as UIButton
button.backgroundColor = UIColor.red
button.setTitle("Click Me !", for: UIControlState.normal)
button.translatesAutoresizingMaskIntoConstraints = false
cell!.contentView.addSubview(button)
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .leading, relatedBy: .equal, toItem: cell.contentView, attribute: .leading, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .trailing, relatedBy: .equal, toItem: cell.contentView, attribute: .trailing, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .top, relatedBy: .equal, toItem: cell.contentView, attribute: .top, multiplier: 1, constant: 10))
cell.contentView.addConstraint(NSLayoutConstraint(item: button, attribute: .bottom, relatedBy: .equal, toItem: cell.contentView, attribute: .bottom, multiplier: 1, constant: 10))
}
return cell!
}