如何在tableview底部添加新行 - 聊天消息

Gij*_*ese 2 uitableview ios swift

每次用户输入消息并单击"发送"时,我都会使用以下代码添加新消息.它很棒.但问题是,在表视图的顶部插入了新消息.我希望它插在底部.

    import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet var messagesTable: UITableView!
    @IBOutlet var messageTextBox: UITextField!

    var messageArray = [String]()

    @IBAction func sendMessage(sender: AnyObject) {

        messageArray.append(messageTextBox.text!)
        messagesTable.reloadData()
        messageTextBox.text = ""

    }


    override func viewDidLoad() {
        super.viewDidLoad()
    }


    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return messageArray.count
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


        //self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0)

        let cell = NSBundle.mainBundle().loadNibNamed("AgentMessageText", owner: self, options: nil)?.first as! AgentMessageText
        cell.messageText.text = messageArray[indexPath.row]
        return cell
    }

}
Run Code Online (Sandbox Code Playgroud)

下面的代码将行插入到底部.但是新插入的行位于视点下方.那就是我们每次都必须滚动才能看到它

self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0)
Run Code Online (Sandbox Code Playgroud)

Jay*_*ane 11

这个问题的一个常见解决方案是翻转桌面视图(让单元格粘到底部),然后翻转单元格,使内容正确定向.

例:

override func viewDidLoad() {
    super.viewDidLoad()

    //flips the tableview (and all cells) upside down
    messagesTableView.transform = CGAffineTransformMakeScale(1, -1)
}
Run Code Online (Sandbox Code Playgroud)

...

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

   ...

   //flips the cell to appear oriented correctly
   cell.transform = CGAffineTransformMakeScale(1, -1)
Run Code Online (Sandbox Code Playgroud)

对于Swift 4

为了清楚起见,对于Swift 4.0,上面的转换函数如下所示

CGAffineTransform(scaleX: 1, y: -1)
Run Code Online (Sandbox Code Playgroud)