iOS8中自定义UITableViewCell动态高度的内容有不同的宽度

Posted

技术标签:

【中文标题】iOS8中自定义UITableViewCell动态高度的内容有不同的宽度【英文标题】:Content of custom UITableViewCell dynamic height in iOS8 has different widths 【发布时间】:2015-04-12 07:54:13 【问题描述】:

我在将 xcode 升级到 6.3 后遇到了这个问题。使用 xcode 6.2 编译的前一个版本没有这个问题并且效果很好。

问题是:切换到其他选项卡并返回后,或者从push segue返回后,大多数单元格的宽度会缩小一点。但有些没有。它看起来像关注

第 2 行单元格中的标签内容具有正确的宽度。并且所有单元格在首次启动后都以正确的宽度显示内容。 在上图中,有两个 uitableviewcells。 内容视图:蓝色; 背景视图:浅绿色; 内容标签:紫色; 第一个单元格中的 bg 视图和 contentLabel 缩小了。那是我不想要的。

我使用故事板来设置约束。 bg 视图的约束。 labelview 的约束 我还尝试根据这个问题UITableView layout messing up on push segue and return. (ios 8, Xcode beta 5, Swift) 缓存单元格高度,但它不起作用。

//In viewDidLoad
self.tableView.estimatedRowHeight = 100.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.contentInset = UIEdgeInsetsZero;

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
    float height = [[self.estimatedRowHeightCache objectForKey:[NSString stringWithFormat:@"%ld", indexPath.row]] floatValue];
    if (height) 
        return height;
     else 
        return UITableViewAutomaticDimension;
    


//cache row height. I observed this doesn't been called in first launching in debugging.
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
    [self.estimatedRowHeightCache setValue:[NSNumber numberWithFloat:cell.frame.size.height] forKey:[NSString stringWithFormat:@"%ld", indexPath.row]];

感谢您的帮助!

【问题讨论】:

可以为单元格的 contentView 设置背景颜色吗?或设置单元格的背景颜色,或者您已经设置并检查? 我已经为每个视图设置了背景颜色。内容视图:蓝色;背景视图:浅绿色,是添加到 contentView 作为标签背景的视图。 contentLabel:紫色。 你能分享你设置这些颜色的代码吗?还有,你用的是xib吗? 我正在使用storyboard,并且已经上传了约束的img。我使用自动布局。 【参考方案1】:

好吧,您没有为contentView 顶部的视图设置水平空间约束。您只是为您的标签及其父视图设置水平空间约束。

这样做

    选择包含标签的视图 Editor > Pin > 引导空间到 SuperView

【讨论】:

【参考方案2】:

为Tableview WillDisplayCell实现DataSource方法

或者您可以在单元格类(如果是自定义单元格)中实现方法 - (void)awakeFromNib 并设置单元格框架。

【讨论】:

以上是关于iOS8中自定义UITableViewCell动态高度的内容有不同的宽度的主要内容,如果未能解决你的问题,请参考以下文章

在 uitableviewcell 中自定义 uipickerview

在 Interface Builder 中自定义 UITableViewCell

UITableViewCell 中自定义 UIView 的 drawRect 行为错误

如何在 xamarin ios 中自定义 UITableViewCell 的背景颜色?

将 UIViewController 设置为 UITableViewCell 中自定义 UIView 的委托

插入行后 UITableViewCell 动态高度中断