具有autolayout错误contentView宽度的程序化自定义UITableViewCell

时间:2016-09-17 12:36:35

标签: ios objective-c uitableview autolayout

我正在使用分组的UITableView创建设置页面。有些单元格只包含一个按钮,我创建了一个自定义的UITableViewCell,只要我需要它就可以重复使用(已有几个地方)。

我面临的问题是,每当我将文字设置到单元格按钮的标题时,按钮大小都不会改变,因此它不会显示文本或在单元格中正确定位(就像我在IB中制作视图一样)。

这是我的自定义单元格

#import "XRPButtonTableViewCell.h"
#import "XRPBaseTableViewCellProtected.h"

@interface XRPButtonTableViewCell ()
@property (nonatomic, strong) UIButton *button;
@end

@implementation XRPButtonTableViewCell

- (void) setupCell {
    [super setupCell];

    NSDictionary *views = @{@"button": self.button};
    self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

    [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.button
                                    attribute:NSLayoutAttributeCenterX
                                    relatedBy:NSLayoutRelationEqual
                                    toItem:self.contentView
                                    attribute:NSLayoutAttributeCenterX
                                    multiplier:1.0
                                    constant:0.0]];

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[button]-|"
                                    options:0
                                    metrics:nil
                                    views:views]];

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=8)-[button]-(>=8)-|"
                                    options:0
                                    metrics:nil
                                    views:views]];

    [self.contentView setNeedsUpdateConstraints];
}

- (UIButton *) button {
    if (!_button) {
       _button = [UIButton buttonWithType:UIButtonTypeCustom];
       _button.translatesAutoresizingMaskIntoConstraints = NO;
       _button.tintColor = [UIColor whiteColor];

       [self.contentView addSubview:_button];
    }

    return _button;
}

@end

在UITableView类中,我已经将UITableViewAutomaticDimension设置为rowHeight,并且还注册了CustomTableViewCell类。

这就是我在cellForRowAtIndexPath

中使用它的方式
case XRPSettingsButton: {

    XRPButtonTableViewCell *cell = (XRPButtonTableViewCell *)[tableView dequeueReusableCellWithIdentifier:[XRPButtonTableViewCell cellReuseIdentifier] forIndexPath:indexPath];
    [cell.button setTitle:@"Press button" forState:UIControlStateNormal];

    return cell;
}

我错过了什么?

更新:我注意到该单元格的contentView的宽度为零。我没有理解原因,因为其他自定义单元格(不同类型)的宽度正确。

问题似乎只在使用iOS 10时出现。如果使用iOS 8或9,按钮确实会出现,但被单元格的contentView紧紧包裹。我不知道的是,为什么contentView没有像我拥有的​​其他自定义单元格一样设置为superview的宽度,而且我使用相同的方法。

我上传了sample codeXRPViewControllerUIViewController的子类,它包含UITableView等。

0 个答案:

没有答案