获取其中包含换行文本的 auto-layout 个单元格的高度
Get height of auto-layout cell with wrapped text in it
我正在尝试实现 heightForRowAtIndexPath 并想使用我已经布局好的带有自动布局的原型单元来查找高度。我已经尝试了以下所有方法,其中 none 给出了单元格的实际高度。在标签被自动换行之前,他们似乎给了我单元格的高度。
我知道我可以使用 NSString 方法找到每个字符串的高度并以此方式计算出单元格的高度,但如果我沿着这条路走下去,我基本上是在复制 auto-layout 的功能,并且会必须在两个地方维护单元格的布局。我真的很想避免这种情况,我假设我在这里遗漏了一些非常简单的东西。
我的原型单元格的高度在 IB 中设置为 67,内容视图的高度在 IB 中设置为 66。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"in heightForRowAtIndexPath: %@", indexPath);
if (!self.prototypeCell)
{
self.prototypeCell = [self.tableView dequeueReusableCellWithIdentifier:@"MessageCell"];
}
// set the text in the labels
[self configureCell:self.prototypeCell forIndexPath:indexPath isForOffscreenUse:YES];
[self.prototypeCell setNeedsLayout];
[self.prototypeCell layoutIfNeeded];
// this gives 58 regardless of the length of the text in my labels
CGSize contentViewSize = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
// this gives me 58.5 regardless of the length of text in my labels
CGSize cellSize = [self.prototypeCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return cellSize.height;
}
我通过设置标签的首选宽度解决了这个问题:
// the label is inside the table view 8 points from each edge
messageCell.message.preferredMaxLayoutWidth = tableView.frame.size.width - 16;
我正在尝试实现 heightForRowAtIndexPath 并想使用我已经布局好的带有自动布局的原型单元来查找高度。我已经尝试了以下所有方法,其中 none 给出了单元格的实际高度。在标签被自动换行之前,他们似乎给了我单元格的高度。
我知道我可以使用 NSString 方法找到每个字符串的高度并以此方式计算出单元格的高度,但如果我沿着这条路走下去,我基本上是在复制 auto-layout 的功能,并且会必须在两个地方维护单元格的布局。我真的很想避免这种情况,我假设我在这里遗漏了一些非常简单的东西。
我的原型单元格的高度在 IB 中设置为 67,内容视图的高度在 IB 中设置为 66。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"in heightForRowAtIndexPath: %@", indexPath);
if (!self.prototypeCell)
{
self.prototypeCell = [self.tableView dequeueReusableCellWithIdentifier:@"MessageCell"];
}
// set the text in the labels
[self configureCell:self.prototypeCell forIndexPath:indexPath isForOffscreenUse:YES];
[self.prototypeCell setNeedsLayout];
[self.prototypeCell layoutIfNeeded];
// this gives 58 regardless of the length of the text in my labels
CGSize contentViewSize = [self.prototypeCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
// this gives me 58.5 regardless of the length of text in my labels
CGSize cellSize = [self.prototypeCell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return cellSize.height;
}
我通过设置标签的首选宽度解决了这个问题:
// the label is inside the table view 8 points from each edge
messageCell.message.preferredMaxLayoutWidth = tableView.frame.size.width - 16;