2017-02-22 3 views
0

Как угловой радиус только верхний левый и верхний правый вид таблицы пользовательской ячейки. Я пишу следующий код, и он отлично работает на iphone 6, 5 , 7. но на Iphone 6+, 7+ он выглядит как данный экран.Как угловой радиус только верхний левый и верхний правый вид таблицы на пользовательской ячейке на Iphone +

Мой код ----

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomeCell"]; 
if (indexPath.row == 0) {   
     UIBezierPath *maskPath = [UIBezierPath 
            bezierPathWithRoundedRect:cell.contantsView.bounds 
            byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) 
            cornerRadii:CGSizeMake(4, 4) 
            ]; 

     CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
     maskLayer.frame = cell.bounds; 
     maskLayer.path = maskPath.CGPath; 
     cell.contantsView.layer.mask = maskLayer; 
     cell.contantsView.layer.masksToBounds = YES; 

    } 


    return cell; 
} 

И мой экран выглядеть -: enter image description here

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

+0

Возможный дубликат [как установить cornerRadius только нижний левый, нижний правый и верхний левый угол UIView?] (Http://stackoverflow.com/questions/25616382/how-to- set-cornerradius-for-only-bottom-left-bottom-right-and-top-left-corner-of) – Adeel

+0

нет У меня есть сценарий с отсрочкой, пожалуйста, внимательно прочитайте. –

ответ

0

Вопрос заключается в том, что, когда cellForRowAtIndexPath вызвана, cell.contentView.bounds (и я полагаю, ваш contantsView находится внутри этого) не то же самое, как cell.bounds. Пока вы устанавливаете frame вашего слоя, используя boundscontantsView, но при создании UIBezierPath для вашей маски вы используете bounds самого cell. Это не то же самое (во время cellForRowAtIndexPath, по крайней мере).

Итак, что предлагает несколько возможных исправлений:

  • Простое исправление заключается в cell.boundscell.contantsView.bounds, а не при определении пути Безье. Вы используете один CGRect для path слоя формы, а другой для frame того же слоя. Вы действительно должны использовать тот же CGRect для обоих, и cell.bounds не страдает этой странной проблемой размера.

  • frame из contentView изменений ячейки после cellForRowAtIndexPath. Таким образом, вышеупомянутое исправление работает, потому что cell.bounds не изменяется, тогда как contentView (и, вероятно, ваш contantsView).

    Правильное исправление заключается в том, что вы действительно должны поместить маскирование слоя в layoutSubviews для этого представления, которое вы маскируете. (Это, кстати, также гарантирует, что маска будет настроена соответствующим образом, если вы измените ориентацию на устройстве, а также все остальное, что может изменить размеры contentView.)

    Если вы не хотите для подклассификации contantsView и реализации layoutSubviews для этого вы можете теоретически поместить замаскированный цвет фона на самой ячейке, а не на contantsView, и реализовать layoutSubviews в CustomeCell. (Честно говоря, это может быть правильным взглядом на применение этого фона, во всяком случае.) Но при том, что вы применяете цвет фона, маскирование углов представления должно действительно происходить в его layoutSubviews.