运行时自动布局的 UIButton 大小

UIButton size with Autolayout at runtime

我发现了几个关于此的问题,但我还没有找到关于如何真正做到这一点的可靠答案,所以我希望这不是因为没有找到具体答案而重复。

这是我的问题:我正在重写一个旧的 iOS 应用程序,它有一个带有自定义单元格的表格视图,并且在每个单元格内都有一个单一颜色的按钮。 按钮的宽度是在运行时计算的,以显示每个单元格的每个按钮的宽度不同,创建看起来像侧图表的内容。

我 want/need 做同样的事情但是我的项目已经用自动布局完成了,我需要它在 iPhone 和 iPad 上工作所以删除自动布局点会有点痛

由于自动布局,我的单元格布局受到约束,当所有单元格的宽度相同时它看起来很好,但我还没有想出一种方法让它在运行时改变它的宽度。

这里还有一个问题,来自我在 SO 上找到的问题。

这是我的单元格在运行时的样子:

我需要中间的这个按钮(蓝色的东西)留在团队名称和值的中间,右边的值必须保持在相同的位置(所以不要移动到如果条形图很小,则在左侧)。

如有任何关于此问题的建议,我们将不胜感激。 谢谢!

给按钮同时设置centerX和centerY约束;这将使它保持在中间。给它一个固定的宽度,并为该约束创建一个 IBOutlet,这样您就可以在代码中更新它的常量值来修改条形的宽度。队名标签应该有一个约束到左边缘,值标签应该有一个约束到右边缘;这将使它们在所有屏幕尺寸上保持原位。

例如,table 视图控制器中的这段代码,

- (void)viewDidLoad {
    [super viewDidLoad];
    self.theData = @[@{@"name":@"One", @"value": @6094, @"width": @200}, @{@"name":@"Two", @"value": @210, @"width": @20}, @{@"name":@"Three", @"value": @7075, @"width": @250}, @{@"name":@"Four", @"value": @6648, @"width": @225}, @{@"name":@"Five", @"value": @2300, @"width": @100}, @{@"name":@"Six", @"value": @900, @"width": @50}];
    [self.tableView reloadData];
}


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


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

    RDTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    cell.leftLabel.text = self.theData[indexPath.row][@"name"];
    cell.rightLabel.text = [NSString stringWithFormat:@"%@",  self.theData[indexPath.row][@"value"]];
    cell.widthCon.constant = [self.theData[indexPath.row][@"width"] floatValue];
    return cell;
}

给出这个结果,