繁体   English   中英

Swift-滚动时出现tableViewCell问题

[英]Swift - tableViewCell issue when scrolling

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

  • ChatingViewController:与情节提要上的View Controller关联的类

  • CustomChatingTableViewController

  • 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时,它变得可怕:

滚动之前:

在此处输入图片说明

滚动后:

在此处输入图片说明

有什么建议吗?

提前致谢

cellForRowAtIndexPath ,您正在重用单元格。 但是,然后在自定义UITableViewCell ,您要多次添加( self.addSubViewself.dateself.message (yikes),并添加imageContainer新实例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM