我正在使用分组的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 code。 XRPViewController
是UIViewController
的子类,它包含UITableView等。