分组 TableView,使用自定大小的部分标题,重新加载后,如果我向上滚动,tableview 会跳转

Posted

技术标签:

【中文标题】分组 TableView,使用自定大小的部分标题,重新加载后,如果我向上滚动,tableview 会跳转【英文标题】:Group TableView,using self sizing section header,after reload,if I scroll upward ,tableview will jump 【发布时间】:2017-04-17 10:43:42 【问题描述】:

我正在做一个这样的tableview:一个twitter和cmets; enter image description here

我尝试了几种架构。我没有找到足够的问题和讨论。我认为这是一个非常有意义的问题,所以我发布了这些架构的性能和局限性。

首先,将整个单元格用作带有cmets的twitter,cmets视图将根据模型生成。单元格使用自动调整大小的自动布局高度。 这种架构可以工作。但是如果 twitter 有很多 cmets(30 或更多),在旧 iPhone(4s、5、5s 等)中,fps 将下降到 40。滚动平滑的明显块。这个性能瓶颈是这种架构的唯一弱点。

其次,由于性能瓶颈,我想也许我可以在推特单元格中放置一个评论表格视图。推特单元格和嵌入式评论单元格也使用自调整自动布局高度。但经过尝试,我发现推特单元格无法确认其高度,因为嵌入式评论表格视图本身无法确认其高度。所以我需要计算嵌入式评论表格视图的高度以确认推特单元格的高度。这个架构也很好用。但是它的性能瓶颈和第一个架构一样。

第三,也是最重要的,使用section header作为twitter,cell作为comment。也就是说,一个section是一个带有cmets的整个twitter。Section header和cell都使用self-sizing auto-layout height。 这个架构的性能是最好的,即使是 twitter 多达 50+ cmets,tableview 滚动在 iPhone5 上也很流畅,fps 至少是 55。但是有一些奇怪的问题我无法解决。 我滚动到底部,tableview将重新加载下一页。reloadData后,第一个小问题是节标题消失,但滚动后出现(后来我发现如果我设置tableview标题,就会出现这个问题,如果我删除tableview标题,这个问题消失了,很困惑)。第二个也是更重要的问题是,如果我向上滚动,tableview 会“跳”。下面是 gif 演示。(我不知道如何将大 gif 发布到 ***,对不起) https://github.com/yutanchi/GroupTableViewSectionHeaderJump/blob/master/tableviewjump.gif 我认为原因是 tableview 使用估计的节标题高度而不是实际的节标题高度。我搜索了很多信息,但没有任何帮助不是。 因为这种架构具有明显的性能优势,所以我想确定 self-sizing section header 有什么问题,解决这些烦人的问题并使用该架构。有人可以解释或讨论一下吗?

【问题讨论】:

【参考方案1】:

为此,您必须将所有约束条件从左上到下赋予所有元素。 还 1-in viewDidLoad 设置如下

self.yourtableView.estimatedRowHeight= your estimated_height_for_Cell
yourtableView.rowHeight = UITableViewAutomaticDimension

2-在属性检查器中为标签设置行数为零。

【讨论】:

以上是关于分组 TableView,使用自定大小的部分标题,重新加载后,如果我向上滚动,tableview 会跳转的主要内容,如果未能解决你的问题,请参考以下文章

在手动创建的部分中对核心数据 tableView 行进行分组

我可以在情节提要中设置分组的 tableView 部分编号吗?

分组UITableView,多个部分在iPhone SDK中创建问题

如何在不使用 TableViewController 的情况下创建分组的 TableView

iOS:啥是分组的 tableView 页眉/页脚文本默认样式

Swift CoreData:无法使用带有自定义功能的 sectionNameKeyPath 对 tableView 进行分区