2016-01-28 2 views
4

У меня есть UIView в обычном UITableViewCell, и я хочу округлить только нижний левый и правый углы этого вида. Я делаю следующее, но это не работает:Круглый только 2 угла UIView в пользовательских UITableViewCell - iOS

- (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; 
} 

Я обычно достичь этого в обычных View Controllers в методе viewWillLayoutSubviews и она прекрасно работает, но нет такого метода, когда я подкласс UITableViewCell.

Любая идея, как я могу обойти два угла вида в подклассе UITableViewCell?

+1

раз попробовать в cellrowatindexpath и попробовать –

+0

Пробовал. Не работает :( – hyd00

+0

Причина, по которой она вызывалась только один раз, если вы ее прокручиваете, это не влияет, можете ли вы обновить свой вопрос –

ответ

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; 
} 
+0

Что такое _im, это вид? –

+0

Это вид, который вы хотите обогнуть по углам. – meth

+0

ok, Как я могу получить доступ к представлению из UITableViewCell? –

1

метод

tableView:willDisplayCell:forRowAtIndexPath: 

UITableViewDelgate будет называться сверхурочные, когда клетка собирается отображаться на экране. Вы можете использовать свой код в этом методе.

+0

Спасибо за информацию об этом методе Delegate, о котором я не знал. Но, к сожалению, это не работает для моего случая. Это происходит только при прокрутке таблицыView, показывает круглые углы, но не когда таблица загружается в первый раз – hyd00

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; 
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; 
} 
Смежные вопросы