我正在创建一个单元格:
-(AnswerTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
AnswerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[AnswerTableViewCell alloc] initWithFrame:CGRectMake(0, 0, self.answersTable.frame.size.width, [self tableView:nil heightForRowAtIndexPath:indexPath])];
}
NSLog(@"cell.frame - %@", NSStringFromCGRect(cell.frame));
NSLog(@"self.answersTable.frame - %@", NSStringFromCGRect(self.answersTable.frame));
AnswerObject* answer = self.question.answers[indexPath.row];
CGFloat height = [self tableView:nil heightForRowAtIndexPath:indexPath];
[cell setupAnswerTableViewCell:self.question answer:answer row:indexPath.row height:height];
return cell;
}
我只看到一半。
当我打印单元格和表格框架时,我可以看到表格比单元格更细。怎么回事?
2014-03-20 21:36:22.478 Theory[43601:60b] cell.frame - {{0, 0}, {320, 44}}
2014-03-20 21:36:22.479 Theory[43601:60b] self.answersTable.frame - {{20, 38.880001068115234}, {280, 500}}
答案 0 :(得分:0)
可能不是tableViewCell
错误的框架,而是tableview
。如果是UITableView
,则其rows
的宽度始终与tableView
自身的宽度相同。
顺便说一句,你真的不应该使用initWithFrame:reuseIdentifier:
,因为它被弃用了。 (尤其不是nitWithFrame:
方法,cell
如何了解其reuseIdentifer
?)如果您是以编程方式创建单元格,则应使用initWithStyle:reuseIdentifier:
。
同时致电
[self tableView:nil heightForRowAtIndexPath:indexPath]
tableView:cellForRowAtIndexPath
中的是非常错误的。如果你在参数中传递tableView
,它将导致无限循环,这可能是你传递nil的原因。您可以将tableView:heightForRowAtIndexPath
中的代码提取到单独的方法中并在两种情况下调用。但是你真的应该相信你的cell
根据height
来调整其内容的布局,所以你真的不应该处理 cell
{{1} } frame
方法。
答案 1 :(得分:0)
您应该使用此初始化程序
创建单元格- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
这是单元格中的常用init,因此您不需要框架。
//您需要从答案文本中获取单元格高度,并在此方法中将其作为CGFloat
返回(类似于此示例)
-(CGFloat)getAnswerHeightForCell:(Aswer *)answer {
NSString *text = answer.text;
CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)];
return textSize.height ;
}
在tableView的dataSource和delegate方法中,您需要添加单元格的高度并创建单元格。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
Answerobject * answer = [self.question.answers[indexPath.row];
CGFloat answeSize = [self getAnswerHeightForCell:answer ];
return textSize.height + SOME_EXTRA_HEIGHT_FOR_PADDING;
}
-(AnswerTableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
AnswerTableViewCell *cell =( AnswerTableViewCell*) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[LZCommentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
}
AnswerObject* answer = self.question.answers[indexPath.row];
[cell setupAnswerTableViewCell:self.question answer:answer row:indexPath.row];
return cell;
}