我想要一个 iOS 表格视图。每个单元格将具有不同的单元格内容,范围从 1 到 10(最大值)。我希望单元格根据内容的大小自动调整大小。
我尝试了一些没有帮助的现有解决方案。
对此有任何帮助吗?或任何开源
我想要一个 iOS 表格视图。每个单元格将具有不同的单元格内容,范围从 1 到 10(最大值)。我希望单元格根据内容的大小自动调整大小。
我尝试了一些没有帮助的现有解决方案。
对此有任何帮助吗?或任何开源
通常这是通过在您的单元类上使用一个类方法来完成的,该方法将计算出给定内容的必要高度。然后,您在 tableview 委托方法中调用此类heightForRowAtIndexPath
方法,将内容传递给将用于该索引路径的类方法。像这样:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Event* event = self.events[indexPath.row];
return [EventCell cellHeightForEvent:event];
}
在您的单元格高度类方法中,您可以通过使用sizeWithFont
您希望显示的 NSString 等方法来计算内容的大小。
+ (CGFloat)cellHeightForEvent:(Event *)event {
CGSize textSize = [event.title sizeWithFont:[UIFont fontWithNameB:@"Helvetica" size:12] constrainedToSize:CGSizeMake(67, MAXFLOAT)];
CGFloat paddedHeight = textSize.height + 22;
CGFloat min = 46;
return MAX(min, paddedHeight);
}
这将导致您的行高根据内容动态变化。请注意,您必须适当地调整单元格视图layoutSubviews
的大小,以适合每个新行的内容大小。
注意:上面建议将特定大小硬编码到特定索引路径的答案是一个非常糟糕的解决方案。您可能不知道数据元素的数量或顺序,这使得该解决方案不可能实现。此外,如果数据集发生变化(数量或顺序),则您必须返回并重新编码索引路径以再次正确。我给出的解决方案不需要针对不同的或动态的数据集进行重构。
这是您正在寻找的:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 10.0f;
}
根据 indexPath 您可以返回不同的高度。
实现以下委托方法:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
indexPath.row 将表示单元格内容的索引并返回其高度。
创建自定义 UITableViewCell 子类,布局您的单元格并使用相同的逻辑来计算委托方法中的 rowHeight,如上面建议的那样
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//calculate the height of your custom cell based on indexPath
return customCellHeightForRowAtIndexPath;
}