动态设置 uitableviewcell 的高度

Dynamically setting height of the uitableviewcell

我有一个包含名称、图像、评论、附件和喜欢/不喜欢按钮的表格视图单元格。附件是可选的。如果有任何附件,它应该有一个固定的高度约束,否则为 0。单元格以编程方式创建。问题是,虽然评论大小的动态高度正在发生,但附件的动态高度没有设置并导致波动。我附上下面的代码。谁能帮帮忙

 override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?){
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    
    backgroundColor = .clear
    
    contentView.addSubview(backView)
    contentView.addSubview(descLabel)
    contentView.addSubview(userImage)
    contentView.addSubview(posterLabel)
    contentView.addSubview(likeBtn)
    contentView.addSubview(flagBtn)
    contentView.addSubview(likeLabel)
    contentView.addSubview(flagLabel)
    contentView.addSubview(commentImage)
    
    NSLayoutConstraint.activate([
        userImage.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 25),
        userImage.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 25),
        userImage.heightAnchor.constraint(equalToConstant: 40),
        userImage.widthAnchor.constraint(equalToConstant: 40),
        
        posterLabel.leadingAnchor.constraint(equalTo: userImage.trailingAnchor, constant: 8),
        posterLabel.centerYAnchor.constraint(equalTo: userImage.centerYAnchor),
        posterLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16),
        
        descLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 25),
        descLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -25),
        descLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 75),            descLabel.heightAnchor.constraint(greaterThanOrEqualToConstant: 30),
        
        commentImage.leadingAnchor.constraint(equalTo: descLabel.leadingAnchor),
        commentImage.widthAnchor.constraint(equalToConstant: 50),
        commentImage.topAnchor.constraint(equalTo: descLabel.bottomAnchor, constant: 8),
        
        likeBtn.leadingAnchor.constraint(equalTo: userImage.leadingAnchor),
        likeBtn.heightAnchor.constraint(equalToConstant: 30),
        likeBtn.widthAnchor.constraint(equalToConstant: 30),
        likeBtn.topAnchor.constraint(equalTo: commentImage.bottomAnchor, constant: 12),
        likeBtn.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -12),
        
        likeLabel.leadingAnchor.constraint(equalTo: likeBtn.trailingAnchor, constant: 0),
        likeLabel.bottomAnchor.constraint(equalTo: likeBtn.bottomAnchor, constant: -4),
        
        flagBtn.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -40),
        flagBtn.heightAnchor.constraint(equalToConstant: 30),
        flagBtn.widthAnchor.constraint(equalToConstant: 30),
        flagBtn.bottomAnchor.constraint(equalTo: likeBtn.bottomAnchor),
        
        flagLabel.leadingAnchor.constraint(equalTo: flagBtn.trailingAnchor, constant: 0),
        flagLabel.bottomAnchor.constraint(equalTo: flagBtn.bottomAnchor, constant: -4),
        
        backView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 12),
        backView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 12),
        backView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -4),
        backView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -12),
    ])
    
    commentImageHeightConstraint = commentImage.heightAnchor.constraint(equalToConstant: 0)
    commentImageHeightConstraint?.isActive = true
    
    likeBtn.addTarget(self, action: #selector(voteComment(sender:)), for: UIControl.Event.touchUpInside)
    flagBtn.addTarget(self, action: #selector(flagComment(sender:)), for: UIControl.Event.touchUpInside)
}

要使附件可选,您应该将附件放入 stackView,然后根据需要 hide/show因此,当您隐藏 stackView 中的附件时,附件的高度将为 0,这意味着它会消失,反之亦然。 例如:

    button.isHidden = true
//Now this button will be optional, means it will have 0 height, width.

如果要显示按钮。

    button.isHidden = true
//Button will be shown like miracle.