gpt4 book ai didi

ios - Swift - 滚动时的 tableViewCell 问题

转载 作者:行者123 更新时间:2023-11-29 02:27:56 26 4
gpt4 key购买 nike

我正在使用 swift 创建一个聊天应用程序。在我的 Storyboard上,我有一个负责显示消息的 View Controller 。我有 3 个 swift 文件:

  • ChatingViewController : 与 Storyboard上的 View Controller 关联的类

  • 自定义聊天 TableView Controller

  • CellChatingTableViewCell

每条消息都显示在一个单元格中。我以编程方式创建 tableView。

- ChatingViewController

            import UIKit

class ChatingViewController: UIViewController {

var messageController = [[String:String]]()

var tableViewController = CustomChatingTableViewController()

override func viewDidLoad() {

let sizeTableView = CGSize(width: view.frame.size.width - 2 * margin, height: view.frame.size.height - sizeTextField.height - 2 * margin - self.navigationController!.navigationBar.frame.size.height)
let originTableView = CGPoint(x: margin, y: 2 * margin + self.navigationController!.navigationBar.frame.size.height)

tableViewController.tableView.frame = CGRect(origin: originTableView, size: sizeTableView)
tableViewController.tableView.registerClass(CellChatingTableViewCell.self, forCellReuseIdentifier: "Cell")
tableViewController.data = messageController
tableViewController.tableView.separatorStyle = .None

view.addSubview(tableViewController.tableView)
}

- CustomChatingTableViewController

import UIKit

class CustomChatingTableViewController: UITableViewController {


var data:[[String:String]]!

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

return data.count
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as CellChatingTableViewCell

cell.setCell(data[indexPath.row]["name"] as String!, date: data[indexPath.row]["date"] as String!, message: data[indexPath.row]["message"] as String!)

return cell


}

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 150
}

}

** -CellChatingTableViewCell**

import UIKit
class CellChatingTableViewCell: UITableViewCell {

var date = UILabel()
var message = UILabel()

func setCell(name:String,date:String,message:String){


let imageContainerMessage = UIImage(named: "orange.png")!.stretchableImageWithLeftCapWidth(24, topCapHeight: 15)


self.date.font = UIFont(name: "Arial", size: 10)
self.date.text = date
self.date.numberOfLines = 0
self.date.lineBreakMode = NSLineBreakMode.ByWordWrapping
let sizeDateLabelMax = CGSizeMake(self.frame.size.width, 9999)
let expectedSizeDate = self.date.sizeThatFits(sizeDateLabelMax)
self.date.frame = CGRect(origin: CGPoint.zeroPoint, size: expectedSizeDate)



self.message.font = UIFont(name: "Arial", size: 15)
self.message.text = message
self.message.numberOfLines = 0
self.message.lineBreakMode = NSLineBreakMode.ByWordWrapping
let sizeMessageLabelMax = CGSizeMake(self.frame.size.width, 9999)
let expectedSizeMessage = self.message.sizeThatFits(sizeMessageLabelMax)
self.message.frame = CGRect(origin: CGPoint(x: 15, y: 10), size: expectedSizeMessage)

var imageContainer = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: expectedSizeDate.height + 5), size:
CGSizeMake(expectedSizeMessage.width + 25, expectedSizeMessage.height + 25)))
imageContainer.image = imageContainerMessage


self.addSubview(self.date)
self.addSubview(imageContainer)
imageContainer.addSubview(self.message)
}
}

当我加载 ViewController 时,一切正常,但是当我滚动 tableView 时,它变得很糟糕:

滚动前:

enter image description here

滚动后:

enter image description here

有什么建议吗?

提前致谢

最佳答案

在您的cellForRowAtIndexPath 中,您正在重复使用单元格。但随后在您的自定义 UITableViewCell 中,您将添加 (self.addSubView) self.dateself.message多次(哎呀),并添加 imageContainer 的新实例。

您应该在重新添加之前清除单元格,或者用新数据使它们无效但不要再次执行 self.addSubView

关于ios - Swift - 滚动时的 tableViewCell 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com