我正在创建一个聊天界面。
将用户的消息放入新的UITable视图单元格中。
更新表视图时,我使用以下代码。
extension UITableView {
func scrollToBottom() {
let rows = self.numberOfRows(inSection: 0)
if rows > 0 {
let indexPath = IndexPath(row: rows - 1, section: 0)
self.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
}
实际上这效果好一点,但有些奇怪。
当我关闭应用并再次打开它,或退出屏幕并再次进入后,会出现以下问题。
问题在于,当我添加一个新单元格时,它会上升到表格视图中的第一个单元格并返回到最后一个单元格。
随着细胞数量的增加,滚动变得太快而且太乱了。
我只想继续更新新注册的最后一个单元格。
我该怎么办?
答案 0 :(得分:0)
func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
let newText = (textView.text as NSString).stringByReplacingCharactersInRange(range, withString: text)
let numberOfChars = newText.characters.count // for Swift use count(newText)
let typedStr : String = textView.text
var compArr = typedStr.componentsSeparatedByString("\n")
_ = newText.componentsSeparatedByString("\n")
self.sendBtn.setTitle("Send", forState: .Normal)
if numberOfChars > 0 {
self.sendBtn.enabled = true
}
else {
self.TextViewHeight.constant = TEXTVIEW_OFFSET
self.sendBtn.enabled = false
}
let char = text.cStringUsingEncoding(NSUTF8StringEncoding)!
let isBackSpace = strcmp(char, "\\b")
if text == "\n"
{
print("Return_Pressed")
if compArr.count == 1 || compArr.count == 2 || compArr.count == 3
{
self.TextViewHeight.constant = self.TextViewHeight.constant + 25
self.tableViewScrollToBottom(false)
}
else
{
}
}
}
func tableViewScrollToBottom(animated: Bool) {
dispatch_async(dispatch_get_main_queue()) {
let numberOfSections = self.ChatTableView.numberOfSections
let numberOfRows = self.ChatTableView.numberOfRowsInSection(numberOfSections-1)
if numberOfRows > 0 {
let indexPath = NSIndexPath(forRow: numberOfRows-1, inSection: (numberOfSections-1))
self.ChatTableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
}
}
}
答案 1 :(得分:0)
尝试使用scrollToBottom
方法调用viewWillAppear
函数。也许只需要在返回TableViewController时更新行数。