【发布时间】:2021-03-03 10:57:06
【问题描述】:
我正在制作一个聊天应用程序并试图找出表格单元格的重用机制。根据传入/传出的消息,我无法将聊天气泡左右对齐。我现在拥有的是:
class ConversationTableViewCell: UITableViewCell {
@IBOutlet weak var messageTextLabel: UILabel?
@IBOutlet weak var messageView: UIView?
@IBOutlet weak var trailingPaddingConstraint: NSLayoutConstraint?
@IBOutlet weak var leadingPaddingConstraint: NSLayoutConstraint?
func configure(with data: ConversationViewController.ConversationDataModel.Message) {
messageView?.layer.cornerRadius = 12
messageTextLabel?.text = data.text
switch data.messageType {
case .incoming:
trailingPaddingConstraint?.isActive = false
leadingPaddingConstraint?.isActive = true
messageView?.backgroundColor = UIColor(named: "IncomingMessage") ?? .gray
case .outgoing:
trailingPaddingConstraint?.isActive = true
leadingPaddingConstraint?.isActive = false
messageView?.backgroundColor = UIColor(named: "OutgoingMessage") ?? .green
}
}
}
如您所见,我根据消息类型启用或禁用所需的约束,但似乎这些约束(并且只有它们)在重用单元格时重置,导致气泡与前导侧对齐。我该怎么做才能成功更新约束而不遇到此类问题?
【问题讨论】:
-
您是否在返回单元格之前尝试调用
layoutIfNeeded()? -
@πter 是的,我做到了。顺便说一句,我刚刚发现将 .isActive 设置为 false 会删除约束,这意味着leadingPaddingConstraint 和 trailingPaddingConstraint 在某些时候都为零
-
哦,不知怎的,我错过了,你是完全正确的。所以我想从约束中删除
weak会解决你的问题。
标签: swift uitableview uikit cell