我在自定义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个角?
答案 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;