无法调整包含 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 中调整子视图的大小