动态 UITableViewCell 高度不起作用
Posted
技术标签:
【中文标题】动态 UITableViewCell 高度不起作用【英文标题】:Dynamic UITableViewCell height not working 【发布时间】:2016-10-30 12:06:35 【问题描述】:(带有情节提要的 ios 8) 我的 tableView 上有一个正确的细节 UITableViewCell。
在故事板中,Title 和 Right Detail 标签设置为 numberoflines = 0
我的代码:
- (void)viewDidLoad
[super viewDidLoad];
keyArray = [[NSMutableArray alloc]init];
self.table.estimatedRowHeight = 140.0;
self.table.rowHeight = UITableViewAutomaticDimension;
[spinner startAnimating];
[self cleanJson:prunedDictionary];
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
return UITableViewAutomaticDimension;
- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
return UITableViewAutomaticDimension;
在 cleanJson 结束时,我运行 [self.table reloadData]
。
TableViewCell 确实会调整大小,但它们都会调整为相同的大小,并且看起来像是默认大小。 (我知道它们调整大小的原因是因为在 Storyboard 中我将高度设置为 200,并且在应用运行时它们都被调整为更小的尺寸)
为什么他们没有正确调整大小?
【问题讨论】:
您的约束可能是错误的。你能以某种方式将它们添加到你的问题中吗? @d.felber 没有限制,因为正如我提到的,它不是自定义单元格。因此,据我所知,它已经有限制 【参考方案1】:问题在于您使用的是内置单元格类型以及内置标题和详细信息标签。这些细胞类型不是自我调整大小的。
您必须使用自定义单元格并自行设计,并使用从内向外调整单元格大小的约束。
【讨论】:
【参考方案2】:您不需要这两种委托方法中的任何一种。单元格没有正确调整大小,因为您的自动布局约束设置不正确。检查这些约束并确保至少存在一个从上到下的约束视图路径。我的意思是,您可以从单元格本身的顶部逻辑上跳..通过所有视图和垂直约束,然后向下跳到底部。
像这样:
超级视图的顶部
边距约束
查看
边距约束
.
.
.
.
查看
边距约束
超级视图的底部。
介于两者之间的视图必须限制为固定大小......或者它们必须能够根据其内容调整大小。很明显,最终高度是所有这些边距和视图高度的组合。
这是一个线性函数
finalheight = topmargin + viewHeight + margin + viewHieght..etc....etc..bottommargin
【讨论】:
这不是自定义单元格。所以我相信已经设置了约束 你能证实它是真的吗?假设是调试中最大的敌人。 它不是自定义单元格?我可以验证是的。该自定义单元格不需要约束。几乎是积极的。 约束已经到位并且有效。相信任何人,当然不相信 UIKit。您可以使用实时视图调试器。【参考方案3】:实际上有一种方法 - 但我更喜欢创建自定义 UITableViewCell
:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
let cell = self.tableView(tableView, cellForRowAt: indexPath)
let targetSize = CGSize(width: self.tableView.bounds.width, height: CGFloat.infinity)
return cell.systemLayoutSizeFitting(targetSize,
withHorizontalFittingPriority: 1000,
verticalFittingPriority: 900).height
【讨论】:
现在不行Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSLayoutConstraint constant is not finite! That's illegal. constant:inf
以上是关于动态 UITableViewCell 高度不起作用的主要内容,如果未能解决你的问题,请参考以下文章
文本为空字符串时,自动布局UILabel的动态高度计算不起作用?