UITableView 从当前位置滚动到底部

Posted

技术标签:

【中文标题】UITableView 从当前位置滚动到底部【英文标题】:UITableView scroll to bottom from current position 【发布时间】:2017-07-20 05:05:03 【问题描述】:

如何从当前位置滚动到 tableview 中的最后一行,因为我已经尝试过这个解决方案:

self.tableView.scrollToRow(at: lastIndex.last!, at: .bottom , animated: false)


let numberOfSections = self.tableView.numberOfSections
            let numberOfRows = self.tableView.numberOfRows(inSection: numberOfSections-1)

        if numberOfRows > 0 
            let indexPath = IndexPath(row: numberOfRows-1, section: (numberOfSections-1))
            self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: animated)
        

它不会从当前位置滚动,而是从最高位置滚动。即使我现在的位置是最后一行

【问题讨论】:

【参考方案1】:

func scrollToLastRow() 
  let indexPath = NSIndexPath(forRow: objects.count - 1, inSection: 0)
  self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Bottom, animated: true)

滚动的意思是,从当前位置开始。所以这段代码应该可以工作。

否则,您可以使用 scrollRectToVisible 指定要滚动的框架

tableView.scrollRectToVisible(tableView.rectForRowAtIndexPath(indexPath),animated: true) 

【讨论】:

我可以推荐检查 objects.count > 0【参考方案2】:

试试这个代码,

yourTableView.scrollRectToVisible(CGRect.init(x: 0, y: yourTableView.contentSize.height - yourTableView.frame.size.height, width: yourTableView.frame.size.width, height: yourTableView.frame.size.height), animated: true)

【讨论】:

【参考方案3】:

您必须提供更多信息,当您想将表格视图滚动到最后一个索引时,因为此代码完美运行

let indexPath = IndexPath.init(row: lastRow, section: 0)
customTableView.scrollToRow(at: indexPath, at: .bottom, animated: true)

更新

最后这里是我的工作代码

  @IBAction func sendBtnPressed(_ sender: UIButton) 
    self.listMessages.append(messageTextView.text)
    let lastIndexPath = IndexPath.init(row: self.listMessages.count-1, section: 0)
    self.tableView.insertRows(at: [lastIndexPath], with: .none)
    self.tableView.scrollToRow(at: lastIndexPath, at: .bottom, animated: true)
    messageTextView.text = "";
    

【讨论】:

我试过你的代码,但还是一样。当我在 cellforrowat 中检查它时,即使我在最后一行,它也会滚动整个表格。我通过打印 cellforrowat 中的行来检查它,它从 0 打印到最后一行,对于每个滚动,即使动画没有显示它从顶部滚动。 你能告诉我你写这段代码的位置吗 我将它添加到 sendMessage 函数中。所以每次用户发送消息时,它都会重新加载表格并滚动到最后一行 你在重新加载你的tableView后添加了这段代码吗?如果没有请添加 我之前已经这样做了 //重新加载最后一行 let lastIndex = [IndexPath(row: listMessages.count-1, section: 0)]; self.tableView.beginUpdates() self.tableView.insertRows(at: lastIndex, with: .none) self.tableView.endUpdates() let indexPath = IndexPath.init(row: self.listMessages.count-1, section: 0) self.tableView.scrollToRow(at: indexPath, at: .bottom, 动画: true)【参考方案4】:

对于 Swift 4

func scrollToLastRow() 

    if CommentNameArray.count != 0 
        let indexPath = NSIndexPath(row: CommentNameArray.count - 1, section: 0)
        self.CommentTableView.scrollToRow(at: indexPath as IndexPath, at: .bottom, animated: true)
    


【讨论】:

以上是关于UITableView 从当前位置滚动到底部的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 中滚动到顶部后,CAGradientLayer 位置错误。迅速

UITableView滚动到不需要的索引或位置

启动 UITableView 滚动到底部

uitableview 不会滚动到底部

检测 UITableView 何时滚动到底部

UITableView 不滚动到底部(Swift IOS)