无法调整包含 UIView 的 UITableViewCell

Posted

技术标签:

【中文标题】无法调整包含 UIView 的 UITableViewCell【英文标题】:Unable to resize an UITableViewCell containing an UIView 【发布时间】:2015-09-17 09:35:28 【问题描述】:

我有一个自定义表格视图单元格。我在表格视图单元格中有一个 UIView,仅在表格展开时显示。每次点击时,我都会切换表格视图单元格的高度以显示 UIView。我还需要检测对 UIView 某些组件的点击。

->tablecell1

-->UIView1 高度 h1

->tablecell2

-->UIView2 高度 h2

单元格的单元格高度应根据 UIView 的大小而有所不同。目前我正在打电话 tableView:heightForRowAtIndexPath: 用于改变单元格点击的高度。但是,如果 UIView 的高度可变并且较大的视图被剪裁,这将不起作用。

有没有更好的解决方法?

【问题讨论】:

你能发布你的代码吗?你不应该直接打电话给tableView:heightForRowAtIndexPath:。您应该调用任何重新加载方法:developer.apple.com/library/ios/documentation/UIKit/Reference/… 您是否将 UIView 的固定高度作为 IB 中的约束? 您可以轻松实现具有自动布局和 UITableViewAutomaticDimension 的动态表格视图单元格(从 iOS8 开始)。您可以在这里找到更多信息:appcoda.com/self-sizing-cells 我会尝试为单元格大小添加约束。 【参考方案1】:

好的,你的控制器不会调用tableView:heightForRowAtIndexPath:

我在动态调整单元格大小时经常遇到的最大问题是heightForRowAtIndexPath 在表格布局过程中很早就被调用,因此基本上必须在要求表格视图布局之前知道每个单元格的高度。无论如何,我将假设您正在使用自定义表格视图单元格并在其中放置了一个 UIView...如果您没有,请执行。

首先:将一个名为 heightNeededForTableViewCellWithView:(UIView *)view 的类函数放入 CustomTableViewCell 并确定您想要的高度,处理视图为 nil 的情况以及 default 的大小。

第二:在调用tableView:heightForRowAtIndexPath: 时调用此类函数,并且由于您在控制器中拥有数据源,因此您可以根据您希望为该行显示的视图动态返回heightNeededForTableViewCellWithView:viewAtRow

第三:当用户点击一个单元格时,记住他们点击了哪个索引并调用 [tableView reloadData] 将调用tableView:heightForRowAtIndexPath:

【讨论】:

会尝试一下。似乎更像是一种 hack,但如果我能根据我的数据猜测 UIView 的大小,它应该可以工作。

以上是关于无法调整包含 UIView 的 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章

如何在加载了 nib 文件的 UIView 中调整子视图的大小

调整 UIView 大小时动画无法按预期工作

根据 Swift 中的 UILabel 文本调整 UIView 高度

调整 UIView 的大小以适应 CGPath

如何将 UIView 调整为横向?

UIView - 调整大小以适应内容