展开或折叠时可展开的 UItableview 内容高度不同

Posted

技术标签:

【中文标题】展开或折叠时可展开的 UItableview 内容高度不同【英文标题】:Expandable UItableview content height are different during expanded or collapsed 【发布时间】:2018-06-26 16:06:28 【问题描述】:

我创建了一个通过多个部分分隔的可扩展表格视图。因为这个tableview在一个container view里面,所以每次tableview展开或者折叠的时候我都需要更新一下container view的大小。

我用 tableview.contentsize.height 更新了容器大小,但我发现内容大小在展开或折叠时有所不同。

例如,假设有 4 个部分,如果我折叠第 3 和第 4 部分,tableview 将返回 200 的高度。同时,如果我只展开第 1 和第 2 部分而第 3 和第 4 部分折叠,则内容尺寸高度大于200。

我很沮丧为什么程序给我这样混乱的信息,因为我需要一个合适的内容大小高度来更新容器视图。这里的任何人都可以启发我吗?

【问题讨论】:

没有更多信息我无法判断,但我怀疑您要么不需要调整 containerView 的大小,要么您不了解 UIScrollViews 的工作原理。 @PeejWeej 我对 swift 太陌生了,我发现有 UItableviewautomaticdimension 功能。一个问题,containderview里面的tableview,那么这个container在一个static tableview cell里面,可以根据内容自动调整大小吗? 你有一个ContainerView inside UITableViewCell? @PeejWeej 是的,我正在维护旧代码,所以我现在无法进行太多更改。有什么方法可以动态改变静态表格单元格内容器的大小? 通常这甚至是不允许的,但也许它适用于静态单元格。如果您将所有约束设置为自动调整大小,您可以在 ContainerViews 上设置 containerView.translatesAutoresizingMaskIntoConstraints = false,它应该根据其布局约束调整大小。 【参考方案1】:

尝试自己计算高度,而不是使用contentSize。如果每个单元格的高度相同,那就容易多了。假设它们的高度都是 50,第 1 部分有 1 行,第 2 部分有 3 行。 (1 + 3) * 50 = 容器高度。显然,如果您有部分和插图,您还需要将其包含在您的计算中。

如果您的单元格高度不同,只需调用表格视图单元格高度委托来获取相关高度。

如果这对您不起作用,那么请更具描述性并添加一些代码。

【讨论】:

【参考方案2】:

您描述的内容大小的行为是正确的。如果您想知道UITableView 的高度,您应该查看它的框架,而不是它的内容大小。

我不知道为什么表格视图需要一个容器视图,你可以像简单的UIView一样布局它,那么你会少一个问题,只需更改表格视图框架。

更新

阅读 cmets 后,我发现您希望 tableView 在 tableViewCell 中。大部分你必须自己做,但我可以帮助你UITableViewAutomaticDimension

尝试将其添加到您的 viewController:

 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    return UITableViewAutomaticDimension
 

 override func tableView(tableView: UITableView, estimatedHeightForRowAt indexPath: NSIndexPath) -> CGFloat 
    return 44//approximate cell height
 

主要是在界面生成器中正确设置约束。请记住,约束不会改变构建器上单元格的高度,您可能必须在尺寸检查器中自己完成。无论如何,如果您不这样做 - 它将在构建期间调整大小。

【讨论】:

兄弟,但是frame.height总是返回表格的最大值,无论折叠还是展开高度数都没有变化 取决于您如何折叠或展开 tableView,请在您的问题中添加一些代码,我会尽力提供帮助

以上是关于展开或折叠时可展开的 UItableview 内容高度不同的主要内容,如果未能解决你的问题,请参考以下文章

iPhone UITableView 可展开/可折叠

展开/折叠带有支持 NSFetchedResultsController 的 UITableView 部分

左侧菜单栏折叠展开效果-超级简单

关于类似QQ的展开和折叠效果的实现

时间轴组件(Vue+element)

layui侧边栏折叠和展开效果该怎么实现