UITableView 滚动到单元格顶部

Posted

技术标签:

【中文标题】UITableView 滚动到单元格顶部【英文标题】:UITableView scroll to the top of the cell 【发布时间】:2016-02-02 13:27:20 【问题描述】:

我有一个带有 3 个静态单元格的 UITableViewController。一个在顶部的高度为 60.0,一个在底部的大小相同。中间单元格的高度是动态的,非常大,所有 3 个单元格一起填满了整个屏幕。 中间单元格包含一个填充整个单元格的 UITextView。 我的问题是,当我想在该 TextView 中键入内容时,tableview 会在键盘上升时自动滚动,并且在我手动回滚之前,我看不到包括光标在内的单元格顶部。 有什么办法可以防止表格视图像这样自动滚动?或者告诉它应该滚动到单元格的顶部以便我看到光标?

我已经尝试覆盖viewWillAppear(_:) 方法而不调用它的超级方法,但是我无法手动滚动表格视图,因此当键盘可见时我无法到达最后一个单元格。 我还尝试手动滚动到textViewDidBeginEditing(_:) 内的单元格,但它没有任何改变。我的方法看起来像这样。

func textViewDidBeginEditing(textView: UITextView) 
    let indexPath = NSIndexPath(forRow: 1, inSection: 0)
    self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: .Top, animated: true)

我不知道我还能尝试什么,所以非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

好吧,你可以像这样设置tableView的contentInset:

self.tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 80, right: 0)

因此您可以使用底部来补偿您想要的偏移量。

【讨论】:

这使得表格视图滚动到底部更多:/并且底部巨大的空白空间看起来并不好 在开始编辑时尝试不同的值或负值来调整它,当结束编辑被调用时,只需将其返回到0 我为底部和顶部尝试了不同的值,但它们都不起作用。实际上,它只会使您无法在键盘可见的情况下转到第一个/最后一个单元格。 ://【参考方案2】:
mainTableView.scrollsToTop = true

mainTableView.setContentOffset(CGPointZero, animated:true)

【讨论】:

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

加载视图控制器时如何滚动到特定的 UITableViewCell 顶部到 UITableView 顶部

如何停止 UITableView 在顶部和底部的滚动?

如何检测 UITableView 滚动?

在顶部和底部停止滚动UITableView?

在某些单元格上禁用UITableView滚动

滚动到 UITableView 框架之外