gpt4 book ai didi

ios - cell.contentView systemLayoutSizeFittingSize : does not work for dynamic height tableview

转载 作者:可可西里 更新时间:2023-11-01 04:51:52 25 4
gpt4 key购买 nike

我尝试在自定义 uitableviewcell 中使用自动布局并尝试根据this SO topic实现动态高度

Using Auto Layout in UITableView for dynamic cell layouts & variable row heights

但我的单元格是由 xib 文件创建的。所以方法有点不同这是我在 heightForRowAtIndexPath 中的代码

   -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
myDataItem *item= [[data items] objectAtIndex:[indexPath row]];



CustomCell *cell = [self.offscreenCells objectForKey:@"CustomCell"];
if (!cell) {
cell = [CustomCell alloc] init];
[self.offscreenCells setObject:cell forKey:@"CustomCell"];
}



[cell.commentView setText:item.comment];
[cell.displayNameView setText:item.displayNameOfItemOwner];

[cell.timeAgoView setText:item.timeAgo];
[cell.imageView setImage:[UIImage imageNamed:@"sis_profile_placeholder"]];


cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(_prototypeCell.bounds));

[cell setNeedsLayout];
[cell layoutIfNeeded];


CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height+1; }

我从 [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize] 得到的高度总是“nil”“当我尝试调试时,我发现我的 customcell 的所有 subview 都是“nil”,但单元格本身不是“nil”。这可能是因为我的 customCell 是由 nib 创建的,当我执行 [[CustomCell alloc] init] 时,单元格没有完全创建。

但我确实尝试将方法更改为 cell = [_tableView dequeueReusableCellWithIdentifier:@"CustomCell"];

结果还是一样。每个 subview 都是 nil 。这使高度返回为零,并使我的 tableView 显示不正确。有什么办法可以解决这个问题吗?

我尝试在 AutoLayout 上制作这些。实际上,在以前的版本中,我没有使用 AutoLayout 并手动计算单元格高度。它确实工作得很好。无论如何,我只是想尝试一下 AutoLayout。

请帮助。提前致谢

最佳答案

这是我的解决方案我通过分配新单元格NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"owner:self options:nil]; //获取指向第一个对象的指针(大概是自定义单元格,因为这是 XIB 应该包含的所有内容)。

        cell = [topLevelObjects objectAtIndex:0];

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
myDataItem *item= [[data items] objectAtIndex:[indexPath row]];



CustomCell *cell = [self.offscreenCells objectForKey:@"CustomCell"];
if (!cell) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
// Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).

cell = [topLevelObjects objectAtIndex:0];

[self.offscreenCells setObject:cell forKey:@"CustomCell"];
}



[cell.commentView setText:item.comment];
[cell.displayNameView setText:item.displayNameOfItemOwner];

[cell.timeAgoView setText:item.timeAgo];
[cell.imageView setImage:[UIImage imageNamed:@"image"]];


cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(_prototypeCell.bounds));

[cell setNeedsLayout];
[cell layoutIfNeeded];


CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height+1; }

关于ios - cell.contentView systemLayoutSizeFittingSize : does not work for dynamic height tableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22621586/

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