动态设置 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.
我有一个包含名称、图像、评论、附件和喜欢/不喜欢按钮的表格视图单元格。附件是可选的。如果有任何附件,它应该有一个固定的高度约束,否则为 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.