2015-06-15 2 views
6

У меня проблема с ограничениями автоматического макета в UITableViewCell при использовании с UIBezierPath. Моя ячейка не станет полной шириной. Вы можете видеть разные изображения между изображением 1 и изображением 2. Изображение 2 Я не добавлял углы округления.Ширина макета UITableViewCell не работает с UIBezierPath

Изображение 1 With UIBezierPath

Изображение 2 Without UIBezierPath

Раньше у меня такая же проблема с UIBezierPath в UIView (вы можете увидеть первые 2 UIView с "0") , Обходной я использую, чтобы замаскировать округление углов в viewDidLayoutSubviews, как показано ниже кодов: -

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    [self.view layoutIfNeeded]; 

    UIView *container = (UIView *)[self.view viewWithTag:100101]; 
    [container setBackgroundColor:[UIColor colorWithHexString:@"ffffff"]]; 
    [self setMaskTo:container byRoundingCorners:UIRectCornerAllCorners]; 
} 

Но теперь я застрял в UITableViewCell, потому что я не могу добавить округление углов в viewDidLayoutSubviews. Мои коды, как показано ниже: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"myData"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    MyWClass *w = [_wData objectAtIndex:indexPath.row]; 

    UIView *container = (UIView *) [cell viewWithTag:200001]; 
    [container setBackgroundColor:[UIColor colorWithHexString:w.bgColor]]; 
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:container.layer.bounds 
                byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight 
                 cornerRadii:CGSizeMake(10.0, 10.0)]; 
    CAShapeLayer *maskLayer = [CAShapeLayer layer]; 
    maskLayer.frame = container.bounds; 
    maskLayer.path = maskPath.CGPath; 
    container.layer.mask = maskLayer; 

    [cell setBackgroundColor:[UIColor colorWithHexString:@"#efeff4"]]; 
    cell.layer.masksToBounds = NO; 
    cell.layer.shadowOpacity = 1.0; 
    cell.layer.shadowOffset = CGSizeMake(0, 2); 
    cell.layer.shadowColor = [UIColor colorWithHexString:@"#e4e4e8"].CGColor; 
    cell.layer.shadowRadius = 0; 

    return cell; 
} 

Я пытаюсь добавить [cell.contentView layoutIfNeeded];, но по-прежнему то же самое.

Любая помощь будет оценена по достоинству.

+0

'container.layer.masksToBounds = YES, или' -clipsToBounds' – 0yeoj

+0

@ 0yeoj пытался, по-прежнему не работает – skycrew

+0

Если вы перечисляете ваши клетки закадровый, сделайте они исправляют себя, когда вы крутите их обратно ? – stefandouganhyde

ответ

0

ниже логики работает для меня:

установить ширину UIView, равную ширине ячейки.

Ex: container.frame.size.width = cell.frame.size.width

Смежные вопросы