Objective c 为什么UITableViewCell的self.frame和self.contentView.frame经常不同?

Objective c 为什么UITableViewCell的self.frame和self.contentView.frame经常不同?,objective-c,xcode4.5,Objective C,Xcode4.5,我撒了 NSAssert(abs(self.frame.size.height-self.contentView.frame.size.height)<=1,@"Should be the same"); NSAssert(abs(self.frame.size.height self.contentView.frame.size.height)这两个矩形位于不同的坐标系中,不一定匹配 cell.frame指单元格在其superview坐标系中的矩形(cell.superview)。单元

我撒了

NSAssert(abs(self.frame.size.height-self.contentView.frame.size.height)<=1,@"Should be the same");

NSAssert(abs(self.frame.size.height self.contentView.frame.size.height)这两个矩形位于不同的坐标系中,不一定匹配

cell.frame
指单元格在其superview坐标系中的矩形(
cell.superview
)。单元格的superview是UITableView。单元格的框架将由表视图操纵,以便正确布局。这还包括修改高度以匹配其
rowHeight
属性或
tableView:heightForRowAtIndexPath:
委托方法返回的值

单元格的
contentView
位于单元格的“内部”。它的superview是单元格本身,其子视图有自己的局部坐标系。这些坐标系不是由tableView操作的,而是由单元格(例如您的单元格子类)在其上设置的约束操作的您的子类可以实现
layoutSubviews
,以便按照您想要的方式调整
contentView
的大小

如果要确保contentView与单元格的高度(和边界)匹配,请在
UITableViewCell
子类中实现
layoutSubviews
如下所示:

-(void)layoutSubviews
{
    self.contentView.frame = self.bounds;
}

你可以对你想要的<代码>内容视图< /C>帧进行任何修改,但是考虑到应该使用Suffview的<代码>界限> />代码来代替本地代码系统,而不是<代码>框架。< /P>马克,请解释为什么单元格宽度和单元格的内容视图宽度不相同。?
(lldb) po cell
$0 = 0x0c0f0ae0 <BGDetailTableViewCell: 0xc0f0ae0; baseClass = UITableViewCell; frame = (0 424; 320 91); hidden = YES; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0xc01e800>>
(lldb) po cell.contentView
$1 = 0x0c086080 <UITableViewCellContentView: 0xc086080; frame = (10 1; 300 89); gestureRecognizers = <NSArray: 0xc0c7ee0>; layer = <CALayer: 0xc0ebbf0>>
-(void)layoutSubviews
{
    self.contentView.frame = self.bounds;
}