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

标签 ios objective-c uitableview

我必须集成从代码中以编程方式生成的 UITableViewCell,如下所示:

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

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

除非我实现 heightForRow,否则我以编程方式生成的 TableView 单元格都被搞砸了(默认估计高度为 64,而不是框架的高度 150),而现有单元格一旦实现就会被搞砸除了 estimatedHeightForRow 之外,还实现 heightForRow。有办法解决这个难题吗?

感谢您的建议。

最佳答案

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

您还没有说明实例化单元后要对它做什么。您使用默认布局还是添加您自己的自定义 View ?默认布局(仅包含一行文本)在我的测试中似乎可以正常工作,单元格的大小根据 textLabel 中的文本量进行调整。

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

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

关于ios - 混合 xib 的 UITableViewCell 和以编程方式生成的 UITableViewCells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36633283/

相关文章:

iOS:应用程序在安装应用程序时不征求用户的许可。每次都获取 kCLAuthorizationStatusNotDetermined - Objective-c & Swift

ios 6 和 7 不返回相同的结果

ios - Spritekit - Tableview 滚动中断

ios - 我可以在 UITableViewCell 之间留出空间吗

ios - 如何使用 Core Data 按部分字母顺序对 tableView 中的数据进行排序?

swift - 为什么 ViewController 内的 tableView 的 reloadData 显示错误?

ios - 在 iOS swift 中音乐结束时播放下一首歌曲

objective-c - 如何将文件映射到 OSX 中的虚拟内存管理器?

ios - 具有方向的单元格位置

objective-c - 为什么初始化子类需要调用父类(super class)的同一个init函数?