好的,几乎每个iOS开发人员都在努力解决这个问题。关于这个问题的许多答案是可用的。
但是我仍然没有找到一个非常实用,通用的解决方案来计算UITableViewCell
中tableView:heightForRowAtIndexPath:
的高度。
我理解UITableView
的布局机制是如何工作的(它在实际布置任何单元格之前计算整个表格的高度)。
我也理解,基本上必须使用UITableViewCell
上的sizeWithFont:...
方法预测NSString
布局方法中发生的所有事情。
我假设单元格的样式首先是UITableViewCellStyleSubtitle
(稍后我们会更加通用!)。
这些是我的要求:
cell.imageView
cell.textLabel
可能包含也可能不包含文字。cell.detailTextLabel
可能包含也可能不包含文字。在大多数情况下,这种动态单元格将用于短列表(可能是某种细节视图),所以我认为预先计算如下所述的单元格是可行的:https://stackoverflow.com/a/8832778/921573
我正在寻找一种计算满足给定要求的细胞高度的实施方案 如果有人能分享一些见解,我会感到非常高兴。经验 - 提前感谢!
答案 0 :(得分:0)
您可以在表格视图的委托中保留一个虚拟单元格,并让它计算自己所需的大小。
答案 1 :(得分:-1)
制作不同高度的自定义单元格的最佳方法是:
为单元格制作NSMutableArray
:
@property (nonatomic,retain)NSMutableArray* cellsArray;
然后在m。:
调用的第一个方法是
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
让你的手机在这里:
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (!self.cellsArray) {
self.cellsArray = [[NSMutableArray alloc]init];
}
ListCell* cell = [[ListCell alloc] initWithFrame:CGRectMake(x, y, width, height)];
// IMPLEMENT your custom cell here, with custom data, with custom,different height:
// after add this cell to your array:
[self.cellsArray addObject:cell];
// IMPORTANT STEP: set your cell height for the new height:
cell.frame = CGRectMake(cell.frame.origin.x, cell.frame.origin.y, 303, yourLastItemInCell.frame.origin.y + yourLastItemInCell.frame.size.height);
return cell.frame.size.height;
}
获得不同高度的自定义单元格后
#pragma mark - conform to delegates
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return self.cellsArray[indexPath.row];
}
我希望它有所帮助!
编辑:
tableView = [[UITableView alloc] initWithFrame:frame style: UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor clearColor];
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;