(Swift)Tableview单元格:textLabel显示,但detailTextLabel不显示

时间:2017-03-15 15:02:26

标签: ios swift uitableview

我在storyboard中设置了一个表视图,并为它提供了一个自定义的单元类:

故事板:

enter image description here

细胞类:

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
}

这是我在运行应用程序时看到的内容:

enter image description here

任何人都知道textLabel出现的原因,而不是detailTextLabel或图片?

2 个答案:

答案 0 :(得分:1)

样式为custom的表格视图单元格没有隐式detailTextLabel,也没有imageView

您必须在故事板中实现这些元素,并将它们连接到适当的IBOutlet

答案 1 :(得分:0)

@ vadian的回答是正确的,但是,您不必手动添加其他标签。 我遇到了同样的问题,并在查看您的问题时意识到Interface Builder中的单元格类型是Custom而不是subtitle。您正确地初始化它,但似乎IB中设置的样式具有优先权。 subtitle样式可确保detailTextLabel显示并在故事板中显示。

希望这有助于其他人。