自定义 UITableViewCell - 似乎无法添加子视图
Posted
技术标签:
【中文标题】自定义 UITableViewCell - 似乎无法添加子视图【英文标题】:Custom UITableViewCell - can't seem to add subview 【发布时间】:2020-04-26 12:50:25 【问题描述】:我创建了一个自定义 UITableViewCell
类,如下所示(以编程方式 - 不使用情节提要):
import UIKit
class MainGroupCell: UITableViewCell
var groupLabel : UILabel
let label = UILabel()
label.textColor = .black
label.text = "Test Group"
label.font = UIFont(name: "candara", size: 20)
return label
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(groupLabel)
groupLabel.snp.makeConstraints(make in
make.center.equalTo(self.contentView)
)
required init?(coder aDecoder: NSCoder)
fatalError("init(coder:) has not been implemented")
由于某种原因,我遇到了错误,即 contentView
和 groupLabel
不在同一个视图层次结构中,但它们是 - 我已将 groupLabel
作为子视图添加到 contentView
,就像你一样可以看到。遇到此错误的任何原因?我也用常规的 Atuolayout API 试了一下,而不是 SnapKit,但没有这样的运气。感觉这可能是我错过的一个小错误。我还尝试了equalToSuperview
约束,而不是上面显示的约束,但正如预期的那样,它也会引发相同的错误-groupLabel
的超级视图返回nil
。
错误:
Unable to activate constraint with anchors <NSLayoutXAxisAnchor:0x280870b80
"UILabel:0x105e79fa0'Test Group'.centerX"> and <NSLayoutXAxisAnchor:0x280870a00
"UITableViewCellContentView:0x105fa16a0.centerX"> because they have no common ancestor.
Does the constraint or its anchors reference items in different view hierarchies? That's illegal.'
【问题讨论】:
您想将 grouplabel 添加到表格单元格并在单元格中居中吗? 没错,这就是目标 【参考方案1】:试试这个,
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
addSubview(groupLabel)
groupLabel.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
groupLabel.leadingAnchor.constraint(equalTo: leadingAnchor,constant: 16),
groupLabel.topAnchor.constraint(equalTo: topAnchor, constant: 16),
groupLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -16),
groupLabel.bottomAnchor.constraint(equalTo: bottomAnchor,constant: -16),
])
像这样更改您的组标签
let groupLabel : UILabel =
let label = UILabel()
label.textColor = .black
label.text = "Test Group"
label.font = UIFont(name: "candara", size: 20)
return label
()
【讨论】:
尝试将您的组标签更改为更新答案中的标签 完美,这是出于某种原因的问题 - 声明 UILabel 的错误。谢谢! 那很好,很乐意为您提供帮助【参考方案2】:改成
make.center.equalTo(self.contentView.snp.center)
或
make.center.equalToSuperview()
代替
make.center.equalTo(self.contentView)
【讨论】:
以上是关于自定义 UITableViewCell - 似乎无法添加子视图的主要内容,如果未能解决你的问题,请参考以下文章
如何修复似乎不影响自定义 UITableViewCell 布局的奇怪 NSLayoutConstraint 错误