UITableViewCell的contentView在heightForRowAtIndexPath中调用时宽度不同:
Posted
技术标签:
【中文标题】UITableViewCell的contentView在heightForRowAtIndexPath中调用时宽度不同:【英文标题】:UITableViewCell's contentView has different width when calling in heightForRowAtIndexPath: 【发布时间】:2014-10-30 13:00:14 【问题描述】:我正在尝试计算使用自动布局进行布局的表格视图单元格的高度。由于这也必须与 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
宽度?
【问题讨论】:
如果表格是静态的,您可以从super
获取高度
但它仍然损坏......我对此进行了更多调查,发现在表格视图上调用 _configureCellForDisplay:forIndexPath:
并将其传递给单元格会将内容视图的大小调整为正确的大小,但是因为这是私有 API,所以不能解决问题...
你已经看过了吗? ***.com/questions/18746929/…
是的,这是我们进行单元格布局的方式,但是一旦有显示指示器或类似的附件视图,iOS7 兼容方式就不再适用于 iOS8。
我没有得到你的答案,究竟是什么坏了,视图调试的结果是什么?
【参考方案1】:
我对@987654323@ 的大小与UITableViewCell
不同的解决方案。可能会破坏UITableViewCell
的一些固有属性,例如附件视图。
在您的单元格类中覆盖 UITableViewCell
的 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
换行的单元格的完美高度,但它总是会切断最后一行,因为高度太小了0.5
点。
我的手机,供参考:
【讨论】:
以上是关于UITableViewCell的contentView在heightForRowAtIndexPath中调用时宽度不同:的主要内容,如果未能解决你的问题,请参考以下文章
iPhone X 上的 UITableViewCell contentView inset
iOS 8:UITableViewCell.contentView 不会调整其中的子视图大小
在 iOS 13 中处理已更改的 AccessoryType 大小
突出显示的 UITableViewCell 和选定的 UITableViewCell 有啥区别?