在运行时使用Autolayout的UIButton大小

时间:2015-05-01 17:23:54

标签: ios objective-c uitableview autolayout nslayoutconstraint

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

以下是我的问题:我正在重写一个旧的iOS应用程序,该应用程序具有自定义单元格的桌面视图,并且在每个单元格内部都有一个单一颜色的按钮。 按钮的宽度在运行时计算,以显示每个按钮的宽度对于每个单元格是不同的,从而创建看起来像侧视图。

我想/需要做同样的事情,但我的项目已经完成了Autolayouts,我需要在iPhone和iPad上工作,所以在这一点上删除自动布局会有点痛苦。

由于自动布局,我的细胞布局有约束,当所有细胞宽度相同时它看起来很好,但我还没想办法让它改变它的宽度在运行时。

这也是我在SO上发现的问题的另一个问题。

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

enter image description here

我需要在中间的这个按钮(蓝色的东西)保持在团队名称和值的中间,并且右边的值必须保持在相同的位置(所以不要向左移动如果酒吧很小)。

对此问题的任何建议将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:1)

为按钮提供centerX和centerY约束;这将使它保持在中间。给它一个固定的宽度,并为该约束创建一个IBOutlet,这样你就可以在代码中更新它的常量值来修改条的宽度。团队名称标签应该对左边缘有约束,值标签应该有一个到右边缘;这将使它们在所有屏幕尺寸上都保持不变。

例如,这个代码在表视图控制器中,

- (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;
}

给出了这个结果,

enter image description here