Как иметь настоящие закругленные углы в UITableView?

Я говорю «верно», потому что, хотя можно выполнить tableView.layer.cornerRadius = 5.0, этот метод не на 100%.

Это прекрасно работает, когда у вас достаточно ячеек, чтобы заполнить весь кадр UITableView, но... если у вас недостаточно ячеек, чтобы заполнить его полностью, то вы попали в колею, потому что ячейки не будут округлены.

Я предполагаю, что лучшее решение требует закругления углов 1-й ячейки (indexPath.row == 0) и последней ячейки (indexPath.row == data.count - 1)... но проблема в том, что мне нужны только 2 верхних угла верхней ячейки закруглены, а нижние два углы нижней ячейки закруглены.

Я думал об использовании метода UIBezierPath/CALayers, но я не знаю, насколько это затратно, и, кроме того, все мои ячейки имеют нестандартную высоту, поэтому я не думаю, что могу точно указать границы своих ячеек, которые UIBezierPath/CALayers метод требует.

Как бы я этого добился?


person David    schedule 19.09.2015    source источник
comment
Используйте путь Безье и слой ca в качестве маски.   -  person Fogmeister    schedule 19.09.2015
comment
@Fogmeister Я пытался, но по какой-то причине мой сотовый исчезает, когда я это делаю.   -  person David    schedule 19.09.2015


Ответы (1)


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

Используя следующий код, вы можете применить закругленный угол к определенному углу любого вида.

- (void)applyRoundCornersToView:(UIView *)view withCorners:(UIRectCorner)corners withRadius:(CGFloat)radius {
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corners cornerRadii:CGSizeMake(radius, radius)];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = view.bounds;
    maskLayer.path = maskPath.CGPath;

    view.layer.mask = maskLayer;
}

Вы можете использовать вышеуказанную функцию, чтобы применить закругленный угол к нужным углам. Применение скругления верхних углов

[self applyRoundCornersToView:cell withCorners:UIRectCornerTopRight|UIRectCornerTopLeft withRadius:5.0];

Применить скругление нижних углов

[self applyRoundCornersToView:cell withCorners:UIRectCornerBottomRight|UIRectCornerBottomLeft withRadius:5.0];
person Yuvrajsinh    schedule 19.09.2015
comment
Я пробовал это, но почему-то ячейка исчезает. - person David; 19.09.2015