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

时间:2016-12-09 09:04:36

标签: ios objective-c iphone uitableview autolayout

我有UITableView与单元格,并在每个单元格中我想添加自定义视图。我创建了xib文件MyView.xib,我创建了一个类,它是UIView类的扩展,名为MyView。在xib文件中,我添加了File&#39的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;
}

重要提示是我使用storyboard创建tableView。所以我有一个原型单元格的表视图,我在这里添加我的自定义视图与其他内容。我正在使用自动布局。

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

第一次加载清单时,有人能告诉我如何解决这个细胞高度问题吗?

1 个答案:

答案 0 :(得分:0)

尝试

- (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];
}