混合xib的UITableViewCell和以编程方式生成的UITableViewCells

时间:2016-04-14 20:24:01

标签: ios objective-c uitableview

我必须集成一个以编程方式生成的UITableViewCell,如下所示:

UITableViewCell *newCell = [[UITableViewCell alloc] initWithFrame: CGRectMake(0,0, screenWidth, 150];

然而,此表视图中的其余单元格是使用依赖自动布局的xib生成的,因此原始程序员仅使用estimatedHeightForRow方法而不是heightForRow

我以编程方式生成的表格视图单元格都是拙劣的(默认估计高度为64而不是帧的高度为150),除非我实现heightForRow而现有单元格在我实现{heightForRow后立即被篡改1}}除estimatedHeightForRow之外。有没有解决这个难题的方法?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

首先,您应该使用UITableViewCell指定的初始化程序 - initWithStyle:reuseIdentifier:而不是UIView的initWithFrame:。但是,我不认为这是导致问题的原因,因为我测试了initWithFrame:它似乎默认为默认样式,没有重用标识符。

一旦你实例化它,你还没有说过你正在做什么。您使用默认布局还是添加自己的自定义视图?默认布局(只有一行文本)似乎在我的测试中正常工作,单元格根据textLabel中的文本数量进行调整。

如果要添加自定义视图,则需要确保contentView具有完全定义其高度的垂直约束。例如,如果您有两个垂直对齐的UILabel,则需要垂直约束,例如@" V:| -10- [label1] [label2] -10- |"。如果未完全定义约束,则contentView将折叠为零,并且您的视图将显示与下一个单元格重叠。

为了给出更多细节,当使用自调整单元格时,UITableView不会查看返回单元格的框架,而是调用单元格的systemLayoutSizeFittingSize:withHorizo​​ntalFittingPriority:verticalFittingPriority:。这导致自动布局引擎分析单元格的约束以计算适当的布局大小。然后,UITableView根据该大小及其在表格中的位置设置单元格的框架。

答案 1 :(得分:0)

我会在你的高度中为行方法添加一个if语句,并将高度设置为相应的单元格。如果我能看到代码也会更容易。