我在storyboard中设置了一个表视图,并为它提供了一个自定义的单元类:
故事板:
细胞类:
class CommentCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
textLabel?.frame = CGRect(x: 100, y: textLabel!.frame.origin.y - 2, width: textLabel!.frame.width, height: textLabel!.frame.height)
detailTextLabel?.frame = CGRect(x: 100, y: detailTextLabel!.frame.origin.y + 2, width: detailTextLabel!.frame.width, height: detailTextLabel!.frame.height)
}
let logoView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.contentMode = .scaleAspectFit
imageView.layer.borderWidth = 1
imageView.layer.cornerRadius = 24
imageView.layer.masksToBounds = true
return imageView
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
addSubview(logoView)
logoView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 8).isActive = true
logoView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
logoView.widthAnchor.constraint(equalToConstant: 48).isActive = true
logoView.heightAnchor.constraint(equalToConstant: 48).isActive = true
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
然后在我的视图控制器中,我给它一些虚拟文本来测试它,textLabel文本显示正常,但detailTextLabel文本和imageView没有。
@IBOutlet weak var tableView: UITableView!
let commentors = ["Person One", "Person Two", "Person Three"]
let comments = ["Comment One", "Comment Two", "Comment Three"]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CommentCell
cell.textLabel?.text = commentors[indexPath.row]
cell.detailTextLabel?.text = comments[indexPath.row]
DispatchQueue.main.async {
cell.logoView.image = UIImage(named: "testImage")
}
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return commentors.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 72
}
这是我在运行应用程序时看到的内容:
任何人都知道textLabel出现的原因,而不是detailTextLabel或图片?
答案 0 :(得分:1)
样式为custom
的表格视图单元格没有隐式detailTextLabel
,也没有imageView
。
您必须在故事板中实现这些元素,并将它们连接到适当的IBOutlet
。
答案 1 :(得分:0)
@ vadian的回答是正确的,但是,您不必手动添加其他标签。
我遇到了同样的问题,并在查看您的问题时意识到Interface Builder中的单元格类型是Custom
而不是subtitle
。您正确地初始化它,但似乎IB中设置的样式具有优先权。
subtitle
样式可确保detailTextLabel
显示并在故事板中显示。
希望这有助于其他人。