iOS 7 第一次通过时不正确计算 UITableViewCell 高度

标签 ios uitableview autolayout

我试图在 iOS 7 中计算我的 uitableviewcell 子类的高度,我发现,在第一次通过时,计算是不正确的。但是,如果我稍后重新加载 tableview,则第二次计算确实是正确的。以下是我计算单元格高度的方法:

    if (_prototypeHeader == nil) {
            _prototypeHeader = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([DDStatusTableViewCell class]) owner:nil options:0] lastObject];
    }
    [_prototypeHeader setFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), 0)];
    [_prototypeHeader configureForMenu:self.menu atRestaurant:self.restaurant];
    [_prototypeHeader setNeedsLayout];
    [_prototypeHeader layoutIfNeeded];

    CGSize size = [_prototypeHeader.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
    NSLog(NSStringFromCGSize(size));
    return size.height + 1;

日志语句正在记录大小:

2014-10-28 10:15:45.492 MyApp[39252:613] {350, 77} <--- this is incorrect
2014-10-28 10:15:46.495 MyApp[39252:613] {294, 110} <--- this is correct

我还注销了两种情况下的 tableview 宽度,它似乎是一致的 320。这只是 iOS 7 中的一个问题。是什么原因造成的?

谢谢!

编辑

经过进一步检查,我确定我的顶部标签的布局宽度不正确。在标签的 layoutSubviews 方法中,我这样做:

- (void)layoutSubviews {
    [super layoutSubviews];
    self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
    self.detailLabel.preferredMaxLayoutWidth = self.detailLabel.frame.size.width;
    [super layoutSubviews];
}

在第一遍中,titleLabel 的宽度为 170,而在第二遍中,宽度为 130。仍在尝试找出原因。 contentView 的宽度在第一次通过时也是 360,在第二次通过时缩小到 320。似乎调整标签宽度的布局代码发生在 contentView 调整其大小之前。

最佳答案

要求单元格在更改 preferredMaxLayoutWidth 之前布局 contentView 似乎可以解决问题。

- (void)layoutSubviews {
    [super layoutSubviews];
    [self.contentView layoutIfNeeded];
    self.titleLabel.preferredMaxLayoutWidth = self.titleLabel.frame.size.width;
    self.detailLabel.preferredMaxLayoutWidth = self.detailLabel.frame.size.width;
    [super layoutSubviews];
} 

关于iOS 7 第一次通过时不正确计算 UITableViewCell 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614549/

相关文章:

android - 在数据库上使用 ionic 进行用户身份验证

iphone - iOS 随机播放图标,就像在音乐应用中一样

ios - 自动布局 uilabel 在 tableView 单元格中自动调整大小

ios - 如何正确获取 tableViewCell 的 contentView 绑定(bind)大小?

ios - 查询 Firebase 问题 - Swift

ios - Fyber 奖励视频和优惠墙 iOS

ios - 在不同重复间隔的Apple Watch上添加提醒通知

Swift 3 - 异步请求表为空,刷新后填充

ios - uitableViewCell 滚动时未加载

ios - 将 View 约束到 UIBarButtonItem 的位置