UITableViewCell的子视图不能是圆形的

时间:2016-08-25 03:11:23

标签: ios objective-c uitableview uiview layer

我想创建一个具有一些圆形子视图的表视图作为UIView。我设置了UIView的layer.cornerRadius和clipsToBounds。但有些观点不圆。谁能帮我解决这个问题或给我一些建议?

我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString * settCellID = @"settingCellID";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:settCellID];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:settCellID];

        UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 10, 20, 20)];
        view.layer.cornerRadius = 10;
        view.clipsToBounds = 1;
        view.layer.rasterizationScale = [UIScreen mainScreen].scale;
        view.layer.shouldRasterize = 1;
        view.backgroundColor = [UIColor blueColor];
        [cell.contentView addSubview:view];
    }
    return cell;
}

结果:

enter image description here

3 个答案:

答案 0 :(得分:0)

在这个clipsToBound里面是Bool所以你应该给YES或NO并尝试使用maskToBound = YES for Corner Radius如果你想合并下面的视图比使用clipsToBound相应而且我不认为rasterizationScale和shouldRasterize是在这里很有用我希望这会帮助你。

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * settCellID = @"settingCellID";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:settCellID];
if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:settCellID];

    UIView * view = [[UIView alloc] initWithFrame:CGRectMake(100, 10, 20, 20)];
    view.layer.cornerRadius = 10;
    view.clipsToBounds = YES;
    view.maskToBounds =YES;
    view.layer.rasterizationScale = [UIScreen mainScreen].scale;
    view.layer.shouldRasterize = 1;
    view.backgroundColor = [UIColor blueColor];
    [cell.contentView addSubview:view];
}
return cell;
}

如果你想要UITableViewCell圆角和剪辑子视图而不是跟随此Link Click here

答案 1 :(得分:0)

rasterizationScale和shouldRasterize用于“离屏渲染”,但它对圆视图没有影响。并且“view.clipsToBounds = YES”是“view.layer.masksToBounds = 1”。我已经使用CGContextRef和UIBezierPath在UITableViewCell上创建了一个圆形视图,但它们无法创建真正的圆形视图。

答案 2 :(得分:0)

您将尝试使用创建自定义单元格类,并使用故事板创建您的视图而不是以编程方式创建视图。并在自定义单元格类中设置视图属性。然后实现上面的代码,但在这里我稍微改了一下。

static NSString * settCellID = @"settingCellID";
'CustomClassName' * cell = (CustomClassName*)[tableView dequeueReusableCellWithIdentifier:settCellID];
cell.viewPropertyName.layer.cornerRadius = 10;
cell.viewPropertyName.clipsToBounds = YES;
cell.viewPropertyName.maskToBounds =YES;
cell.viewPropertyName.backgroundColor = [UIColor blueColor];