【发布时间】:2021-01-07 09:56:16
【问题描述】:
我正在制作一个带有聊天功能的国际象棋应用程序。我将消息上传到 firebase firestore,然后将它们下载到 [Message] 数组中并在 UITableView 中显示。
我一直在 stackoverflow 上寻找这个,发现有几个人在自定义 UITableViewCell 的大小方面遇到问题。我遇到了同样的问题,但在我的情况下,每次调用 .reloadData() 时,单元格的宽度似乎都会随机变化。举例说明:
前 2 次左右,当我在聊天中输入内容时,它应该看起来像这样(圆圈中的单元格)
但正如您在几次之后看到的那样:
我的代码: 自定义单元格类
class MessageCustomCell: UITableViewCell {
@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var bgView: UIView!
@IBOutlet weak var leftImage: UIImageView!
@IBOutlet weak var messageBubble: UIView!
@IBOutlet weak var messageLabel: UILabel!
@IBOutlet weak var rightImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
messageLabel.numberOfLines = 0
messageBubble.layer.cornerRadius = 5
}
}
TableView 委托方法(TableView = messageView)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return allMessages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = messageView.dequeueReusableCell(withIdentifier: "MessageCustomCell") as! MessageCustomCell
//cell.width = tableView.frame.width
let msg = allMessages[indexPath.row]
//cell.frame.size.width = messageView.frame.width
//cell.contentView.frame.size.width = messageView.frame.width
let date = msg.time
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "d/M/yy, h:mm"
let realDate = dateFormatter.string(from: date)
print(msg.fromUserName!)
if msg.fromUserName! == currentUserName {
cell.messageBubble.backgroundColor = UIColor(named: "lightSquare")
cell.messageLabel.textColor = .black
cell.rightImage.isHidden = true
} else {
cell.messageBubble.backgroundColor = UIColor(named: "darkSquare")
cell.messageLabel.textColor = .white
cell.leftImage.isHidden = true
}
cell.dateLabel.text = realDate
cell.messageLabel.text = msg.text!
return cell
}
在我的 MessageCustomcell.xib 文件中,我有一些限制:
- 我已将 leftImage、messageBubble (UIView)、rightImage 放在水平堆栈视图中。图像只有宽度和高度限制。 messageBubble 中的标签对其父视图有限制(顶部、底部、尾随、前导)
- stackView 对 bgView (UIView) 有约束,还有上下尾随和前导。
- 安全区域的 bgView 也是如此。
我尝试为自定义单元格设置框架,但这似乎不起作用,因此我已将其注释掉。
真的希望有人可以帮助我。如果你们需要更多信息,请告诉我:) 谢谢大家。
编辑:
这是我对自定义单元格 xib 文件的限制。
【问题讨论】:
-
将文本标签内容拥抱(V|H)优先级设置为必需(1000)
-
@SPatel 谢谢!不幸的是没有工作。仍然是相同的行为。
-
不看xib文件很难给你答案。我觉得你的约束搞砸了。
-
@Petar 我添加了所有约束的屏幕截图。这会有帮助吗?
-
最好的方法是使用两个单独的单元格,一个用于当前用户,另一个用于其他用户
标签: swift uitableview custom-cell