如何使用tableviewcell的动态高度

时间:2017-10-05 13:29:55

标签: ios swift uitableview uiimageview

我正在使用UITableView来显示我的数据。我有两种类型的第一行UIImageView而另一种没有UIImageView。如果UIImageView中有图像,则行的高度应为207或UIImageView为零,行的高度应为64。

我的编码:

 func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return msgs.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! collCell
    let msg = msgs[indexPath.row]
    var decodeImgURL = ""
    cell.lbl1.text = msg.content

    decodeImgURL = msg.imgurl

    if decodeImgURL == "none" {
        cell.img.isHidden = true
    } else {

        let dataDecoded : Data = Data(base64Encoded:decodeImgURL,options: .ignoreUnknownCharacters)!
        let decodedImage = UIImage(data: dataDecoded)
        cell.img.image = decodedImage

    }
    return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let cell = tableView.cellForRow(at: indexPath) as! collCell
    if cell.img.image != nil {
        return 207
    } else {
        return 64
    }

}

我在let cell = tableView.cellForRow(at: indexPath) as! collCell

收到错误消息

1 个答案:

答案 0 :(得分:1)

使用与heightForRowAt中使用的cellForRowAt相同的数据:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    let msg = msgs[indexPath.row]

    if msg.imgurl == "none" {
        print("row \(indexPath.row) does NOT have an image")
        return 64
    } else {
        print("row \(indexPath.row) DOES have an image")
        return 207
    }

}

或者,您可以使用自动布局和约束来自动调整行的高度...但这是另一个主题。