我试图以编程方式实现一个表视图单元格中的堆栈视图与标签和按钮添加到它,像这样:堆栈视图在表视图细胞
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let dict = self.char[indexPath.row]
let stackView = UIStackView()
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.spacing = 20
stackView.distribution = .fillProportionally
stackView.alignment = .leading
cell.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: cell.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: cell.trailingAnchor)
])
let bornLabel = UILabel()
bornLabel.textColor = UIColor.blue
let bornLabelValue = UILabel()
bornLabelValue.textColor = UIColor.blue
stackView.addArrangedSubview(bornLabel)
stackView.addArrangedSubview(bornLabelValue)
for (key, value) in dict {
bornLabel.text = key
bornLabelValue.text = value
if key == "Height" {
let button = UIButton(type: .roundedRect)
button.setTitle("English", for: .normal)
button.setTitleColor(.blue, for: .normal)
stackView.addArrangedSubview(button)
}
}
return cell
}
的问题是,每次tableView.reloadData()
被称为,另一个单元格被添加到现有的单元格的顶部,每个标签具有不同的值,具体取决于提供给tableView的数据。或者它可能不会每次生成另一个单元,但只需添加另一个堆栈视图。我不确定。我怎样才能解决这个问题?
感谢
您的回答让我找到了正确的地方,谢谢。我通过确实使用原型单元格,添加了一个stackview并在'cellForRowAt indexPath:'中配置stackview来解决它。我曾尝试过,并且在'cellForRowAt indexPath:'中实例化了我的标签和按钮,而不是在我的自定义单元类中,现在它完美地工作。谢谢! – user2747220