ios – Autolayout – 在表格单元格中对齐视图

我目前正在将iOS应用程序移植到autolayout,我发现了一个我无法解决的问题.问题是UITableView.

表非常简单:

>每个单元格包含两个标签,它们之间有水平间距.
>我希望第一个标签根据内容自动调整大小
>我希望所有单元格中的标签具有相同的宽度

点1.和2.很简单,但我不知道如何创建一个约束,强制不同单元格中的视图具有相同的大小.

是否有任何自动布局解决方案或我是否必须手动设置框架?

最佳答案 我会通过使用两个标签创建自定义单元格类来完成此操作.为左边标签指定一个宽度约束(以及对单元格左边缘和centerY的约束),并为右边标签提供一个水平间距约束.将IBOutlets设置为两个标签,并将一个设置为左标签的宽度约束(在我的示例中,我称之为widthCon).在我的例子中,我给两个标签一个背景颜色,所以我可以看到宽度.我在viewDidLoad中计算最长字符串的宽度,然后使用该数字调整cellForRowAtIndexPath中宽度约束的常量:

@interface TableController ()
@property (strong,nonatomic) NSArray *theData;
@property (nonatomic) CGFloat maxWidth;
@end

@implementation TableController 


- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@"One",@"Two",@"Three Hundred Forty",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine"];
    self.maxWidth = 0;
    for (NSString *s in self.theData) {
        CGSize stringSize = [s sizeWithFont:[UIFont systemFontOfSize:17]];
        if (stringSize.width > self.maxWidth) self.maxWidth = stringSize.width;
    }
    [self.tableView reloadData];
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.theData.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    RDCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.widthCon.constant = self.maxWidth;
    cell.leftLabel.text = self.theData[indexPath.row];
    return cell;
} 
点赞