ios 剪辑到边界和蒙版到成组UITableViewCell中的边界

brvekthn  于 2023-01-14  发布在  iOS
关注(0)|答案(2)|浏览(124)

我试图用包含UITextView的分组UITableViewCell的圆角来掩盖UITextView的角。

下面是我用来防止边角与单元格边框重叠的一些代码。我两种都试过了

cell.contentView.layer.masksToBounds = YES;
cell.layer.masksToBounds = YES;  //tried this as a test, still doesn't work
detailTextView.clipsToBounds = YES;
[cell.contentView addSubview:detailTextView];

以及

cell.layer.masksToBounds = YES;
cell.contentView.layer.masksToBounds = YES;
detailTextView.clipsToBounds = YES;
[cell addSubview:detailTextView];

这显然不起作用,我错过了什么?

jchrr9hc

jchrr9hc1#

我很确定你不能用这种方法来屏蔽角,单元格的backgroundView是一个分组的UITableView的图像,所以没有屏蔽的感觉。
解决这个问题的一个可能的方法是自己把角弄圆。这有点棘手,因为你只想把顶部单元格的顶角和底部单元格的底角弄圆。幸运的是,@lomanf在这里发布了一个很好的解决任意角的方法:在UIView中绕过两个角,使用他的MTDContextCreateRoundedMask方法,我们可以实现我们的目标。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Other cell instantiation

    // First cell in section
    if (indexPath.row == 0) {
        [self roundTopOrBottomCornersOfCell:cell top:YES];       
    }
    // Last cell in section
    else if (indexPath.row == tableView.numberOfRowsInSection:indexPath.section-1) {
        [self roundTopOrBottomCornersOfCell:cell top:NO];
    }
}

// Modified from the second part of @lomanf's Solution 1
- (void)roundTopOrBottomCornersOfCell:(UITableViewCell*)cell top:(BOOL)top {
        // Set constant radius
        CGFloat radius = 5.0;

        // Create the mask image you need calling @lomanf's function
        UIImage* mask;
        if (top) {
            mask = MTDContextCreateRoundedMask(self.view.bounds, radius, radius, 0.0, 0.0);
        }
        else {
            mask = MTDContextCreateRoundedMask(self.view.bounds, 0.0, 0.0, radius, radius);
        }

        // Create a new layer that will work as a mask
        CALayer* layerMask = [CALayer layer];            
        layerMask.frame = cell.bounds;

        // Put the mask image as content of the layer
        layerMask.contents = (id)mask.CGImage;

        // Set the mask layer as mask of the view layer
        cell.layer.mask = layerMask;
}
qij5mzcb

qij5mzcb2#

我也遇到过同样的问题
不同的是,我使用的是普通的风格,我试图使每一个细胞与圆角。最后,我做到了,这里是我的方式:
1.将此代码放入自定义tableViewCell的awakeFromNib方法中

[cell.layer setMasksToBounds:YES];
    [cell.layer setCornerRadius:5.0];

2.设置你的自定义TableViewCell的内容视图的背景色为白色,然后设置你的tableView的背景色为透明色。

相关问题