调用heightForRowAtIndexPath时,UITableViewCell的contentView具有不同的宽度:

时间:2014-10-30 13:00:15

标签: ios objective-c uitableview ios7

我正在尝试计算使用自动布局布局的表格视图单元格的高度。由于这也必须与iOS7兼容,我需要返回heightForRowAtIndexPath:的有效高度。

我正在做的是以下内容:

if (self.userRatingsAbbreviatedTextCell == nil) {
    self.userRatingsAbbreviatedTextCell = [[UserRatingsAbbreviatedTextCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
}
[self.userRatingsAbbreviatedTextCell prepareForReuse];
UserRating *rating = [self.paginationModel ratingAtIndex:reviewIndex];
[self.userRatingsAbbreviatedTextCell configureCellForHotelUserRating:rating];
[self.userRatingsAbbreviatedTextCell layoutIfNeeded];

CGSize size = [self.userRatingsAbbreviatedTextCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;

该单元格有披露指标。当我向单元格询问其contentView宽度时,它是296。但是,在单元格出列后cellForRowAtIndexPath:中,contentView宽度为289,这是用于渲染的大小。有没有人遇到过这样的问题?我需要做什么才能让单元格正确设置其contentView宽度?

1 个答案:

答案 0 :(得分:0)

我对contentView的解决方案与UITableViewCell的大小不同。可能会打破一些UITableViewCell的先天属性,例如附件视图。

在您的单元格类中覆盖UITableViewCell的{​​{1}}方法:

layoutSubviews

在我的情况下,- (void)layoutSubviews { [super layoutSubviews]; // force `contentView` to be the same size as `self` (it's typically 0.5pt smaller) CGRect contentViewFrame = self.contentView.frame; contentViewFrame.size = CGSizeMake(CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)); self.contentView.frame = contentViewFrame; } 总是contentView点较小,并且在计算0.5的正确高度时会导致问题。我会计算出不会导致tableView:heightForRowAtIndexPath:换行的单元格的完美高度,但由于高度UILabel点太小,它总是会切掉最后一行。

我的手机,供参考:

Custom UITableViewCell XIB