如何在ios的UITableview中聚焦最后一个单元格

Posted

技术标签:

【中文标题】如何在ios的UITableview中聚焦最后一个单元格【英文标题】:How to focus last cell in the UITableview in ios 【发布时间】:2018-04-27 07:54:29 【问题描述】:

我正在创建一个聊天界面。

用户的消息被放入一个新的 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)
        
    

其实这个效果好一点,但是有一点奇怪。

当我关闭应用重新打开,或者退出屏幕重新进入后,出现以下问题。

问题是当我添加一个新单元格时,它会上升到表格视图中的第一个单元格并返回到最后一个单元格。

查看问题(https://vimeo.com/266821436)

随着单元格数量的增加,滚动变得太快和太乱。

我只想不断更新新注册的最后一个单元格。

我该怎么办?

【问题讨论】:

如果出现键盘,您何时更改 tableView 的 inset? 你能在scrollToBottom中为索引路径放一些println吗?这将显示是否使用小于行数的索引调用它以及调用该方法的次数。此外,如果您使用事件触发它并在 viewWillAppear 上添加侦听器,请不要忘记在离开屏幕时将其删除。 @DanielAlexandrov 打印索引路径是正常出来的。而且我没有在 viewWillapear 或 viewdidappear 上使用事件监听器,viewdidload... 你如何更新你的数据源? @DanielAlexandrov 以非常标准的方式更新。我在文本字段中写入并按 Enter 将文章添加到特定数组并重新加载表格视图。重新加载后,执行scrollToBottom方法。 【参考方案1】:

请使用 DispatchQueue 滚动,因为您触发的方法是使用 tableView 加载数据执行的,因此我们需要给时间滚动。

extension UITableView 

    func scrollToBottom() 
        let rows = self.numberOfRows(inSection: 0)

        if rows > 0 
            DispatchQueue.main.async 
                let indexPath = IndexPath(row: rows - 1, section: 0)
                self.scrollToRow(at: indexPath, at: .bottom, animated: true)
            
        
    

func scrollToBottom()
    DispatchQueue.main.async 
        let indexPath = IndexPath(row: self.array.count-1, section: 0)
        self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
    

【讨论】:

有时它会失败,但它仍然是所有答案中最好的。【参考方案2】:

self.scrollToRow(at: indexPath.last ...)

【讨论】:

如果索引路径不可见,表格视图不会滚动。

以上是关于如何在ios的UITableview中聚焦最后一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

如何实现(几乎)全视图 uitableview 可以滚动过去最后一个单元格并在 iOS 中显示更多元素

iOS UITableView reloadData 只更新我添加的最后一个条目,如何重新加载所有内容?

iOS 中隐藏UITableView最后一根分隔线

iOS7 UITableView 部分中的最后一个单元格强制全宽分隔符

我在学习iOS的UITableView,为啥UITableView的最后一块单元格只能显示一半? [关闭]

如何在 UITableView 中制作最终页脚?