gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:38 26 4
gpt4 key购买 nike

我试图在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com