【问题标题】:Custom UITableViewCell changes width randomly (swift)自定义 UITableViewCell 随机改变宽度(swift)
【发布时间】: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


【解决方案1】:

好的,感谢@SPatel,他指出要为接收方聊天气泡和发送方聊天气泡制作 2 个单独的 .xib 文件。这实际上适用于我的情况,并且首先是正确的方法,而不是为发送者和接收者操作一个自定义单元格。

我认为约束问题与我试图隐藏右图或左图有关,以更改双方的自定义单元格外观。这一定搞砸了自定义单元格的整个约束情况。

不管怎样,快乐的人。继续!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多