在自定义UITableViewCell - iOS中仅绕过UIView的2个角

时间:2016-01-28 11:26:18

标签: ios objective-c uitableview rounded-corners cornerradius

我在自定义UIView中有一个UITableViewCell,我想要围绕该视图的左下角和右下角。我正在做以下事情,但它不起作用:

- (void)awakeFromNib {
    // Initialization code

    CAShapeLayer * maskLayer = [CAShapeLayer layer];
    maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: _viewForTags.bounds byRoundingCorners: UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){7.0, 7.0}].CGPath;

    _viewForTags.layer.mask = maskLayer;
}

我通常在viewWillLayoutSubviews方法中通常的视图控制器中实现这一点并且它工作得很好,但是当我将UITableViewCell子类化时,没有这样的方法。

任何想法如何围绕子类UITableViewCell中的视图的2个角?

4 个答案:

答案 0 :(得分:1)

UITableViewDelgate的

tableView:willDisplayCell:forRowAtIndexPath:
当要在屏幕上显示单元格时,

方法将被称为超时。您可以使用此方法获取代码。

答案 1 :(得分:1)

原因是您将代码放在错误的位置。方法awakeFromNib实际上是您的观点初始化的位置,此时_ viewForTags.bounds会为您提供CGRectZero。您需要将代码移到setSelected:animated:方法中,或者给出具体的CGRect值。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.path = [UIBezierPath bezierPathWithRoundedRect:_viewForTags.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:(CGSize){7.0, 7.0}].CGPath;
    _viewForTags.layer.mask = maskLayer;
}

答案 2 :(得分:1)

实际上UITableViewCell中存在该状态的方法。它是layoutSubviews

-(void)layoutSubviews
{
    CAShapeLayer * maskLayer = [CAShapeLayer layer];
    maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: _im.bounds byRoundingCorners: UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){7.0, 7.0}].CGPath;

    _im.layer.mask = maskLayer;
}

答案 3 :(得分:0)

应用于cellforrowatindex

CAShapeLayer * maskLayer = [CAShapeLayer layer];
maskLayer.path = [UIBezierPath bezierPathWithRoundedRect: yourCustomCell.yourViewInCustomCell.bounds byRoundingCorners: UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii: (CGSize){7.0, 7.0}].CGPath;

yourCustomCell.yourViewInCustomCell.layer.mask = maskLayer;