我试图计算一个uitableviewcell的高度,而没有使用boundingRectWithSize进行整个舞蹈。
这是我的方法:
+ (CGFloat)heightForItem:(id<DDInfoItem>)item
{
if (!PrototypeCell)
PrototypeCell = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil][0];
[PrototypeCell configureForItem:item];
[PrototypeCell layoutIfNeeded];
CGSize size = [PrototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height+1;
}
不幸的是,这一行
CGSize size = [PrototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
返回nil ...我怀疑因为我没有设置自己的约束,因为它不是UITableViewCell的子类。谁能确认一下?在这种情况下,是否有一种简单的方法要求细胞自我调整大小?
谢谢!
更新
即使我已经进行了子类化并且在IB中添加了约束,我仍然会在高度上获得0。
以下是我在调试器中对contentView的限制:
<NSLayoutConstraint:0x170091030 H:|-(NSSpace(20))-[UILabel:0x12766b610] (Names: '|':UITableViewCellContentView:0x178361380 )>,
<NSLayoutConstraint:0x170094370 V:|-(NSSpace(20))-[UILabel:0x12766b610] (Names: '|':UITableViewCellContentView:0x178361380 )>,
<NSLayoutConstraint:0x1700992d0 H:[UILabel:0x12766b610]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x178361380 )>,
<NSLayoutConstraint:0x170099500 V:[UILabel:0x12766b610]-(NSSpace(8))-[UILabel:0x127559c20]>,
<NSLayoutConstraint:0x170099000 H:[UILabel:0x127559c20]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x178361380 )>,
<NSLayoutConstraint:0x17009c430 H:|-(NSSpace(20))-[UILabel:0x127559c20] (Names: '|':UITableViewCellContentView:0x178361380 )>
请注意,我已使用nib加载方法替换了Prototype单元的initWithStyle:identifier:
此外,当我记录标签的大小时,它们确实似乎正在调整大小。调用systemLayoutSizeFittingSize:的结果仍然是0高度:/
答案 0 :(得分:0)
你可能在这个过程中过早地要求高度。高度为0,因为此时尚未确定高度。
答案 1 :(得分:0)
为了它的价值,我最终只是这样做了:
if (!PrototypeCell)
PrototypeCell = [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil][0];
[PrototypeCell configureForItem:item];
[PrototypeCell setNeedsLayout];
[PrototypeCell layoutIfNeeded];
return CGRectGetMaxY(PrototypeCell.subLabel.frame) + bottomBufferSpacing;