从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误

Posted

技术标签:

【中文标题】从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误【英文标题】:UITableViewCell has wrong height when adding custom view from xib as a subview 【发布时间】:2016-12-09 09:04:35 【问题描述】:

我有带有单元格的 UITableView,并且在每个单元格中我想添加自定义视图。我创建了 xib 文件 MyView.xib 并创建了作为 UIView 类扩展的类,其名称为 MyView。在 xib 文件中,我将 File's Owner 类添加为 MyView。

在 UITableViewCell 中添加此自定义视图时,我希望该自定义视图具有动态高度。这就是我在 init 方法中添加这段代码的原因。

    - (id)initWithCoder:(NSCoder *)aDecoder
        self = [super initWithCoder:aDecoder];

        if (self) 

        // 1. load the interface
        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
        // 2. add as subview
        [self addSubview:self.view];
        // 3. allow for autolayout
        [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

        // 4. add constraints to span entire view
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view":self.view]];

        [self setStyle];

    
    return self;

重要的是我正在使用故事板来创建 tableView。所以我有一个带有一个原型单元的表格视图,我在这里添加了我的自定义视图和其他内容。我正在使用自动布局。

现在的问题是当我运行应用程序时,前几个可见单元格的高度错误(自定义视图不完全可见)。当我向下滚动时,下一个单元格具有良好的高度(自定义视图可见),当我向后滚动时,列表顶部的几个单元格的高度是正确的。

有人能告诉我第一次加载列表时如何解决单元格高度的问题吗?

【问题讨论】:

改为将其移至awakeFromNib func @CZ54 没有任何区别。 :// 可能是你的细胞被重复使用了。 cellForRow返回单元格之前尝试调用cell.contentView.layoutIfNeeded() @Tj3n 已经尝试过了,但没有帮助。 【参考方案1】:

试试

- (void)awakeFromNib 
    [super awakeFromNib];

    // 1. load the interface
    [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
    // 2. add as subview
    [self addSubview:self.view];
    // 3. allow for autolayout
    [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

    // 4. add constraints to span entire view
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:@@"view":self.view]];
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:@@"view":self.view]];

    [self setStyle];

【讨论】:

以上是关于从 xib 添加自定义视图作为子视图时,UITableViewCell 的高度错误的主要内容,如果未能解决你的问题,请参考以下文章

添加和布局从 xib 加载的子视图到自定义单元格

如何将 UITableView 作为子视图添加到 xib 中的 UIView?

如何将视图 XIB 作为子视图加载到视图控制器 XIB 中

将 xib 中的子视图添加到自定义 UIView

无法同时满足约束 - 在添加子视图时

使用 UINavigationBar 和 UIBarButtonItem 自动布局