一直向下滚动到 UITableView 的底部

Posted

技术标签:

【中文标题】一直向下滚动到 UITableView 的底部【英文标题】:Scroll all the way down to the bottom of UITableView 【发布时间】:2016-08-11 03:32:50 【问题描述】:

我有一个UITableView,我正在尝试将 36 行加载到其中,然后一直向下滚动到最后一个单元格。

我试过这个:

func reloadData()
    chatroomTableView.reloadData()
    chatroomTableView.scrollToBottom(true)



extension UITableView 
    func scrollToBottom(animated: Bool = true) 
        let sections = self.numberOfSections
        let rows = self.numberOfRowsInSection(sections - 1)
        if (rows > 0)
            self.scrollToRowAtIndexPath(NSIndexPath(forRow: rows - 1, inSection: sections - 1), atScrollPosition: .Bottom, animated: true)
        
    

但它只能向下滚动一半。

【问题讨论】:

rowssections 在您的 scrollToBottom 函数被调用时是否具有预期值? 是的,rows = 36,sections = 1。但它只滚动到第 0 部分的第 10 行。 尝试将您对 scrollToBottom 的调用封装在 dispatch_asyncdispatch_after 中。 使用 dispatch_async 它将向下滚动到第 24 行,使用 dispatch_after (2 秒) 它滚动到第 22 行。仍然不是我想要的第 36 行。 如果您将解决方案作为单独的答案而不是作为 Nirav D 答案的编辑发布会更好 - 这会使他/您的答案非常混乱。也许可以解释为什么他的回答不足以满足您的需求。 【参考方案1】:

如果您的要求是滚动到tableView 的最后一个cell,您可以像这样使用setContentOffset,这样您就可以滚动到tableView 的最后一个单元格。

把这个放在 reloadData() 函数中:

func reloadData()
    chatroomTableView.reloadData()
    dispatch_async(dispatch_get_main_queue(),  () -> Void in
        let scrollPoint = CGPoint(x: 0, y: self.chatroomTableView.contentSize.height - self.chatroomTableView.frame.size.height)
        self.chatroomTableView.setContentOffset(scrollPoint, animated: true)
    )

将此添加到您的 UITableViewDelegate :

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) 
        let lastRowIndex = tableView.numberOfRowsInSection(0)
        if indexPath.row == lastRowIndex - 1 
            tableView.scrollToBottom(true)
        
    

将此添加到 .swift 文件的底部:

extension UITableView 
    func scrollToBottom(animated: Bool = true) 
        let sections = self.numberOfSections
        let rows = self.numberOfRowsInSection(sections - 1)
        if (rows > 0)
            self.scrollToRowAtIndexPath(NSIndexPath(forRow: rows - 1, inSection: sections - 1), atScrollPosition: .Bottom, animated: true)
        
    

【讨论】:

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

自动滚动到 UITableView 底部

带有插图的 UICollectionView 不会一直向下滚动

EXC_BAD_ACCESS 仅在从 UITableView 中一直向下滚动返回时

向下滚动时,UITableview 看不到最后一个单元格

无法一直滚动到 div 的底部

UITableView,如何修复页脚,使其在滚动时永远不会向上或向下移动?