我必须在UITableview中显示列表详细信息。但是对于一些细胞而言列表很小,而对于一些其他细胞则列出大/中等高度。 (喜欢facebook feed)所以Tableview每个细胞都有不同的高度。我怎样才能做到这一点?
列表包含
imageview,2个标签,textview (标签和文本视图的长度也会根据其内容而增加。它也会影响tableview单元格的高度)。因此,实现这一目标的任何帮助都会非常有用。
感谢。
答案 0 :(得分:0)
#define CELL_MARGIN 10.0f
-(CGFloat)heightForTableView:(NSString*)text widthOfTableview:(CGFloat)tableViewWidth{
CGSize constraint = CGSizeMake(tableViewWidth - (CELL_MARGIN * 2), 20000.0f);
CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = MAX(size.height, 44.0f);
return height + (CELL_MARGIN * 2);
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return [self heightForTableView:cell.titleLabel.text widthOfTableview:CGRectGetWidth(tableView.frame)];// cell.textlable.text is your lable.text
}
此代码可能会帮助您:)
答案 1 :(得分:0)
使用自己的.xib创建您的单元格。根据需要添加标签,textview图像视图等。确保将所有限制水平和垂直限制在单元格的前/后/顶部和底部。
现在的诀窍是告诉autolayout布局单元格的contentView,并返回最小高度以适应其内容。由于在cellForRow中加载单元格之前执行了heightForRow,我们需要使用fakeCell来计算高度。
为此,我们在控制器中有一个tableView,它显示了DetailsTableViewCell类的单元格,并为其创建了一个为其创建的nibThisTableViewCell.xib:
1)在控制器中为fakeCell创建一个@property。
@property (nonatomic, strong) DetailsTableViewCell *fakeCell;
2)在viewDidLoad中,从它们nib初始化它:
self.fakeCell = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass:@"DetailsTableViewCell" owner:nil options:nil].firstObject;
3)在heightForRowAtIndexPath:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
//grab fakeCell, style it with the data you want
[self.fakeCell styleWithDetails:self.details];
//and calculate the minimum height required to fit all content
return [self minimumCellHeightToSatisfyConstraints:self.fakeCell];
}
-(CGFloat)minimumCellHeightToSatisfyConstraints:(UITableViewCell *)cell {
//Makes sure cell's width is equal to tableView's width (can be wrong since they are in separated nibs)
cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(cell.bounds));
//Force autolayout to recalculate all subview's frames
[cell layoutIfNeeded];
//Get the minimum height required for the cell to fit all its content
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height;
}
重要:如果您忘记将.xib中的所有子视图从上到下垂直固定到单元格,请调用systemLayoutSizeFittingSize:UILayoutFittingCompressedSize将返回0并且不起作用。