gpt4 book ai didi

ios - 带有动态类型标签的 AutoLayout 的动态 UITableView 单元格高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:29:24 24 4
gpt4 key购买 nike

我正在使用 AutoLayout 实现我的 tableview 单元格以显示图像和 2 个标签,使用动态类型实现自适应字体大小。

我实现了 estimatedHeightForRowAtIndexPath,这非常合理且易于使用。

我不为单元格使用界面生成器。相反,我使用 Masonry,这应该没有任何区别。

我目前正在努力计算实际的单元格高度。在更新自动布局代码时,手动计算它是一件痛苦且难以维护的事情。

我找到了这个 StackOverFlow 答案:Using Auto Layout in UITableView for dynamic cell layouts & variable row heights此解决方案还应处理不同的字体大小,但对我不起作用。

当我有这样的 AutoLayout 系统时:UILabel 到带填充的顶部 contentView,另一个 UILabel 到带填充的 contentView 底部,它应该自动计算单元格高度。

但是,它会导致以下 AutoLayout 冲突:

UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<MASLayoutConstraint:0xc506be0 UIImageView:0xc5070a0.height == 150>",
"<MASLayoutConstraint:0xc506d90 UIImageView:0xc5070a0.top == UITableViewCellContentView:0xc5076e0.top + 10>",
"<MASLayoutConstraint:0xc506990 UILabel:0xc507450.top == UIImageView:0xc5070a0.bottom + 10>",
"<MASLayoutConstraint:0xc506630 UILabel:0xc507260.top == UILabel:0xc507450.bottom>",
"<MASLayoutConstraint:0xc506530 UILabel:0xc507260.bottom == UITableViewCellContentView:0xc5076e0.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0xc3d05a0 UITableViewCellContentView:0xc5076e0.height == 44>"
)

我使用以下 AutoLayout 代码:

[self.subtitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.titleLabel.mas_bottom);
make.right.equalTo(self.contentView.mas_right).with.offset(-GCBaconCellRowPadding);
make.left.equalTo(self.contentView.mas_left).with.offset(GCBaconCellRowPadding);
make.bottom.equalTo(self.contentView.mas_bottom);
}];

最后一行应该表明单元格的高度延伸到自身。

看AutoLayout冲突的输出,好像是要自动设置高度为44.0,这是默认值。

编辑:将 contentView 的 translatesAutoresizingMaskIntoConstraints 设置为 NO

self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

创建单元格时会修复碰撞,但会导致行高为零。

最佳答案

我最终使用了以下代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
static GCBaconCell *offscreenCell;

if (!offscreenCell)
{
offscreenCell = [[GCBaconCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"nothing"];
}


// configure offscreenCell ...

[offscreenCell.contentView setNeedsLayout];
[offscreenCell.contentView layoutIfNeeded];

CGSize maximumSize = CGSizeMake(320.0, UILayoutFittingCompressedSize.height);
CGFloat height = [offscreenCell.contentView systemLayoutSizeFittingSize:maximumSize].height;

return height;
}

在 Controller 中。

在单元格 View 中确保使用以下行

self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

关于ios - 带有动态类型标签的 AutoLayout 的动态 UITableView 单元格高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550875/

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