4

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

该表非常简单:

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

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

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

4

1 回答 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;
} 
于 2013-07-19T15:13:42.450 回答