我已经找到了几个问题,但我还没有找到关于如何真正做到这一点的可靠答案,所以我希望这并不是因为没有找到具体的答案而重复。
以下是我的问题:我正在重写一个旧的iOS应用程序,该应用程序具有自定义单元格的桌面视图,并且在每个单元格内部都有一个单一颜色的按钮。 按钮的宽度在运行时计算,以显示每个按钮的宽度对于每个单元格是不同的,从而创建看起来像侧视图。
我想/需要做同样的事情,但我的项目已经完成了Autolayouts,我需要在iPhone和iPad上工作,所以在这一点上删除自动布局会有点痛苦。
由于自动布局,我的细胞布局有约束,当所有细胞宽度相同时它看起来很好,但我还没想办法让它改变它的宽度在运行时。
这也是我在SO上发现的问题的另一个问题。
这是我的单元格在运行时的样子:
我需要在中间的这个按钮(蓝色的东西)保持在团队名称和值的中间,并且右边的值必须保持在相同的位置(所以不要向左移动如果酒吧很小)。
对此问题的任何建议将不胜感激。 谢谢!
答案 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;
}
给出了这个结果,