自动滚动到 UITableView 底部

Posted

技术标签:

【中文标题】自动滚动到 UITableView 底部【英文标题】:Auto scroll to bottom of UITableView 【发布时间】:2018-05-07 13:10:54 【问题描述】:

如何在页面打开后自动滚动到 UIViewController 的底部?

目前,当我打开页面时,它一直滚动到顶部。但我需要它在底部,因为这是最新消息所在的位置

这是表格视图的快捷方式:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return self.dataArr.count


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "messages") as! UITableViewCell        
    cell.selectionStyle = .none
    let message = cell.viewWithTag(100) as! UILabel
    let name = cell.viewWithTag(101) as! UILabel
    let data = self.dataArr[indexPath.row] as! [String:AnyObject]
    message.text = " " + String(describing: data["message"]!) + " "
    name.text = String(describing: data["name"]!)

    return cell



func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    var mapStr = ""
    let data = self.dataArr[indexPath.row] as! [String:AnyObject]
    let message = String(describing: data["message"]!)
    let array = message.components(separatedBy: "\n") as! [String]
    let arrayLoc = message.components(separatedBy: "Location: ") as! [String]
        if arrayLoc.count > 0 
            mapStr = arrayLoc[1]
        
    print(mapStr)
    if mapStr.count > 0 
        self.open(scheme: mapStr)
    




【问题讨论】:

可能与https://***.com/questions/29378009/how-do-i-automatically-scroll-in-a-table-view-swift?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa重复 How do i automatically scroll in a table view? (Swift)的可能重复 我看过这个解决方案,但它似乎对我不起作用:(它会抛出错误 【参考方案1】:
let indexPath = IndexPath(item: noOfRows, section: 0)
yourTableView.scrollToRow(at: indexPath, at: UITableView.ScrollPosition.bottom, animated: true)

【讨论】:

如果您希望表格视图在视图出现时滚动,然后将其添加到 viewwillappear 方法,但记住每次都会调用 viewwillappear,其他选项在 viewdidload 方法中。 @OliverFerris 好吧,如果你有数据,那么你可以把这个 viewDidApear . 我明白了!但是现在当我尝试传入 noOfRows 时,我得到一个未解析的标识符:( 它是 noOfRows - 1 @OliverFerris 用 noOfRows 替换您的 tableview 数组计数。【参考方案2】:

这在 Swift 4 中对我有用

我重写了 UITableViewController 类的 viewDidAppear 函数。

override func viewDidAppear(_ animated: Bool) 
    let scrollPoint = CGPoint(x: 0, y: self.tableView.contentSize.height - self.tableView.frame.size.height)
    self.tableView.setContentOffset(scrollPoint, animated: false)

感谢这篇文章 Scroll all the way down to the bottom of UITableView 的答案,注意问题不太一样,他们向下滚动 reloadData 而不是屏幕出现。

【讨论】:

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

如何自动滚动到recyclerView的底部?

自动滚动到文本区域的底部

Android ScrollView 自动滚动到视图底部

有没有办法自动滚动到 UICollectionView 的底部

使用UITableView自动在UITableView上滚动UIImageView

消息加载时滚动到 UITableView 的底部