使用UITableViewCell绘制条形图 - 可变地部分填充颜色的单元格

Bit*_*ise 3 drawing objective-c uitableview ios

我试图用一些部分用颜色填充的行来实现一个表.从本质上讲,我希望功能能够将我UITableViewCell的背景颜色填充到一定的百分比.

下面是UITableViewCells我想要创建的类型的图像.在图像中,您可以看到第一行是完全填充的,第二行是大约75%,第三行是大约20%,依此类推......

期望的效果

我在这个方法上做了一些修改但没有成功:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

我试过了什么?我尝试将子视图添加到每个单元格的内容视图中.子视图将是一种背景颜色,而实际的细胞将是清晰的颜色.以下是我尝试创建75%填充的单元格的代码段:

cell.backgroundColor = [UIColor clearColor];
int fillWidth = (75/100) * cell.frame.size.width;

CGRect rect = CGRectMake(0, 0, fillWidth, cell.frame.size.height);
UIView * view = [[UIView alloc] initWithFrame:rect];
view.backgroundColor = [UIColor purpleColor];
[cell.contentView addSubview:view];

//...

return cell;
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎没有对细胞的渲染方式做出任何改变.

如何为每个表格行实现部分着色效果(如上图所示)?

Yoa*_*rtz 7

我认为你正在划分2个整数并期望加倍,基本上答案就是0.尝试使用75.0/100.0

另一件我忘了提到的事情,cgrect所期望的变量类型是CGFloat,你使用的是int,所以你也必须修复它

CGFloat fillWidth = (75.0/100.0) * cell.frame.size.width;
Run Code Online (Sandbox Code Playgroud)

  • 此外,您需要在单元格的"prepareForReuse"方法中删除添加的子视图(`[cell.contentView addSubview:view];`),或者在故事板中的单元格中添加视图并设置该视图的宽度.否则,每次重用单元格时(即,当滚动表格时),它将只是另一个子视图. (5认同)