Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自动布局约束大小不正确的UITableViewCell子类_Ios_Objective C_Uitableview_Ios8 - Fatal编程技术网

Ios 自动布局约束大小不正确的UITableViewCell子类

Ios 自动布局约束大小不正确的UITableViewCell子类,ios,objective-c,uitableview,ios8,Ios,Objective C,Uitableview,Ios8,我正试图以编程方式创建一个自定义的UITableViewCell,没有XIB,它由一个使用自动布局指定单元格高度的UILabel组成。我已经为单元格的contentView提供了这个标签的前导、尾随、顶部和底部约束,但是这些约束不会影响表视图单元格的高度。标签都堆叠在一起,没有填充,并且表视图分隔线也没有与标签对齐。这里有什么问题 自定义单元格: @interface TransactionTableViewCell () @property (nonatomic, assign) BOOL

我正试图以编程方式创建一个自定义的
UITableViewCell
,没有XIB,它由一个使用自动布局指定单元格高度的
UILabel
组成。我已经为单元格的
contentView
提供了这个标签的前导、尾随、顶部和底部约束,但是这些约束不会影响表视图单元格的高度。标签都堆叠在一起,没有填充,并且表视图分隔线也没有与标签对齐。这里有什么问题

自定义单元格:

@interface TransactionTableViewCell ()

@property (nonatomic, assign) BOOL didUpdateConstraints;

@end


@implementation TransactionTableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.translatesAutoresizingMaskIntoConstraints = NO;

        self.transactionPriceLabel = [[UILabel alloc] init];
        self.transactionPriceLabel.backgroundColor = [UIColor yellowColor];
        self.transactionPriceLabel.translatesAutoresizingMaskIntoConstraints = NO;
        [self.contentView addSubview:self.transactionPriceLabel];
    }

    [self setNeedsUpdateConstraints]; //had to add this otherwise updateConstraints isn't called for some reason

    return self;

}

- (void)updateConstraints {
    if (!self.didUpdateConstraints) {
        self.didUpdateConstraints = YES;

        [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.transactionPriceLabel
                                                                     attribute:NSLayoutAttributeTrailing
                                                                     relatedBy:NSLayoutRelationEqual
                                                                        toItem:self.contentView
                                                                     attribute:NSLayoutAttributeTrailing
                                                                    multiplier:1
                                                                      constant:-15]];
        [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.transactionPriceLabel
                                                                     attribute:NSLayoutAttributeTop
                                                                     relatedBy:NSLayoutRelationEqual
                                                                        toItem:self.contentView
                                                                     attribute:NSLayoutAttributeTop
                                                                    multiplier:1
                                                                      constant:15]];
        [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.transactionPriceLabel
                                                                     attribute:NSLayoutAttributeBottom
                                                                     relatedBy:NSLayoutRelationEqual
                                                                        toItem:self.contentView
                                                                     attribute:NSLayoutAttributeBottom
                                                                    multiplier:1
                                                                      constant:15]];
        [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.transactionPriceLabel
                                                                     attribute:NSLayoutAttributeLeading
                                                                     relatedBy:NSLayoutRelationEqual
                                                                        toItem:self.contentView
                                                                     attribute:NSLayoutAttributeLeading
                                                                    multiplier:1
                                                                      constant:15]];
    }

    [super updateConstraints];
}
视图控制器:

- (void)viewDidLoad {
    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
    tableView.dataSource = self;
    tableView.delegate = self;
    tableView.rowHeight = UITableViewAutomaticDimension;
    tableView.estimatedRowHeight = 44.0;
    [self.view addSubview:tableView];

    tableView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView
                                                     attribute:NSLayoutAttributeLeading
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                     attribute:NSLayoutAttributeLeading
                                                    multiplier:1
                                                      constant:0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView
                                                     attribute:NSLayoutAttributeTop
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                     attribute:NSLayoutAttributeTop
                                                    multiplier:1
                                                      constant:0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView
                                                     attribute:NSLayoutAttributeBottom
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                     attribute:NSLayoutAttributeBottom
                                                    multiplier:1
                                                      constant:0]];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:tableView
                                                     attribute:NSLayoutAttributeTrailingMargin
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.view
                                                     attribute:NSLayoutAttributeTrailingMargin
                                                    multiplier:1
                                                      constant:0]];

    [tableView registerClass:[TransactionTableViewCell class] forCellReuseIdentifier:@"cell"];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TransactionTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

    cell.transactionPriceLabel.text = @"label text";
    cell.transactionPriceLabel.textColor = [UIColor redColor];

    return cell;
}

标签底部到contentView约束底部的常数应该是-15,而不是15。

好眼力!哇,就这么简单。