展开或折叠时可展开的 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 是的,我正在维护旧代码,所以我现在无法进行太多更改。有什么方法可以动态改变静态表格单元格内容器的大小?
通常这甚至是不允许的,但也许它适用于静态单元格。如果您将所有约束设置为自动调整大小,您可以在 ContainerView
s 上设置 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 内容高度不同的主要内容,如果未能解决你的问题,请参考以下文章