尝试将TableView以全高加载到TableViewCell内部

时间:2018-07-25 22:14:33

标签: swift uitableview

因此,我有一个用户帖子供稿。用户可以在这些帖子上发表评论。我想在Feed上预览一些评论。 Facebook的应用程序可以做到这一点。我正在将这些预览的注释加载到表视图中,并且注释本身是API返回的供稿的json对象的一部分,因此它是初始请求的一部分。

以下是我正在调用的供稿中单元格的自定义初始化:

convenience init(style: UITableViewCellStyle, reuseIdentifier: String?, post: FeedContentPost, review: ReviewInfo?, isCommunity: Bool = false) {
    self.init(style: style, reuseIdentifier: reuseIdentifier)
    comments = post.comments
    configureFor(post: post, review: review, isCommunity: isCommunity)
}

在我的帖子表格视图中,帖子单元格通过行单元格以以下方式加载:

switch post.type {
        case let .user(up):
            var cell: UserPostModCell = tableView.dequeueReusableCell(withIdentifier: "UserPostModCell") as! UserPostModCell

            cell = UserPostModCell.init(style: .default, reuseIdentifier: "UserPostModCell", post: up, review: post.review, isCommunity: true)

            cell.delegate = self
            return cell

称为init的init是以前显示的init。

在便捷初始化中调用self.init的同时,将commentTableView设置为这样(使用SnapKit约束):

commentTableView.snp.makeConstraints({ make in
        make.left.right.equalToSuperview()
        make.top.equalTo(engagementButtons.snp.bottom)
        make.bottom.equalTo(buttons.snp.top)
    })

    commentTableView.dataSource = self
    commentTableView.delegate = self
    commentTableView.backgroundColor = UIColor.white
    commentTableView.separatorStyle = .none
    commentTableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    commentTableView.register(PostCommentCell.self)

如您所见,正在设置委托和数据源。这是我在以下位置的行高:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let BASE_HEIGHT: CGFloat = 40
    var calculatedHeight:CGFloat = BASE_HEIGHT

    let comment = self.comments[indexPath.row]

    //Add height for link
    if comment.link != nil {
        calculatedHeight += 82
    }

    let constrainedWidth = (self.commentTableView.frame.width - 42)
    //Add Height for gif/image
    if comment.media != nil || comment.gif != nil {
        let ratio: CGFloat? = comment.media?.ratio ?? comment.gif?.ratio

        if let ratio = ratio {
            calculatedHeight +=  constrainedWidth / ratio
        }else{
            calculatedHeight += 214
        }

    }

    calculatedHeight += comment.text.height(withConstrainedWidth: constrainedWidth, font: UIFont.commentFont(ofSize: 14))

    print("CalculatedHeight: \(calculatedHeight)")
    return calculatedHeight

}

然而,这导致的结果是行的高度不称为AT ALL。 如果可能,1)如何获得要调用的行的高度或更好的事件2)像这样在UITableViewCell内呈现tableview的更好方法是什么?

0 个答案:

没有答案