每次用户输入信息并点击“发送”时,我都会使用以下代码添加新邮件。它很棒。但问题是,在表视图的顶部插入了新消息。我希望它插在底部。
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
}
}
以下代码将行插入到底部。但是新插入的行位于视点下方。那就是我们每次都必须滚动才能看到它
self.messagesTable.contentInset = UIEdgeInsetsMake(messagesTable.frame.height,0,0,0)
答案 0 :(得分:9)
这个问题的一个常见解决方案是翻转桌面视图(让单元格粘在底部),然后翻转单元格,使内容正确定位。
示例:
override func viewDidLoad() {
super.viewDidLoad()
//flips the tableview (and all cells) upside down
messagesTableView.transform = CGAffineTransformMakeScale(1, -1)
}
...
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
...
//flips the cell to appear oriented correctly
cell.transform = CGAffineTransformMakeScale(1, -1)
适用于Swift 4
为了清楚起见,对于Swift 4.0,上面的转换函数如下所示
CGAffineTransform(scaleX: 1, y: -1)
答案 1 :(得分:1)
您必须使用scrollToRow
滚动到您的邮件(根据您的需要使用.bottom / .top / etc.)
此外,您可以只添加一个(新)消息(单元格)到表视图
@IBAction func sendMessage(sender: AnyObject) {
messageArray.append(messageTextBox.text!)
messagesTable.reloadData()
let indexPath = IndexPath(item: messageArray.count, section: 0)
messagesTable.scrollToRow(at: indexPath, at: .bottom, animated: true)
messageTextBox.text = ""
}
答案 2 :(得分:0)
在聊天应用程序中滚动至底部
onLoad={() => {setloaded('true')}}
编写一个函数:
For Swift 3.0
并在重新加载表格视图数据后调用它
func scrollToBottom(){
DispatchQueue.main.async {
let indexPath = IndexPath(row: self.dataArray.count-1, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
答案 3 :(得分:0)
快速5.编写函数:
self.tableView.reloadData() let index =
self.tableView.indexPathsForVisibleRows self.tableView.scrollToRow(at: (index?.last)!, at: .top, animated: true)