2013-04-25 3 views
0

У меня есть подкласс пользовательского Tableview клеток, который рисует тень ... Views First LoadUITableViewCell тень не рисунок для некоторых клеток

Когда я прокручиваю вниз, некоторые из элементов не имеют их тень обращается ...

enter image description here

Это также происходит, когда я прокручиваю обратно.

Я попытался переместить чертежный код в подклассы ячеек drawRect, setNeedsLayout. Я также пробовал это в методе ячейки конфигурации tableviewController.

self.layer.shadowRadius = 4.1f; 
self.layer.shadowOpacity = 0.5; 
self.layer.shadowOffset = CGSizeMake(2.1f,7.4f); 

CGFloat curlFactor = 15.00f; 
CGFloat shadowDepth = 4.6f; 
CGSize size = self.layer.bounds.size; 

UIBezierPath* path = [UIBezierPath bezierPath]; 

[path moveToPoint:CGPointMake(0.0f, 0.0f)]; 
[path addLineToPoint:CGPointMake(size.width, 0.0f)]; 
[path addLineToPoint:CGPointMake(size.width, size.height + shadowDepth)]; 

[path addCurveToPoint:CGPointMake(0.0f, size.height + shadowDepth) 
     controlPoint1:CGPointMake(size.width - curlFactor, size.height + shadowDepth - curlFactor) 
     controlPoint2:CGPointMake(curlFactor, size.height + shadowDepth - curlFactor)]; 
[self.layer setShadowPath:[path CGPath]]; 

Заранее благодарен.

ответ

0

Похоже, что вы рисуете тени вне пределов каждого вида UITableViewCell, когда UITableView повторно использует ячейки и отображает их, он может не сохранять все подъязыки ячеек друг над другом, и вам нужно обеспечить их сами.

в UITableView делегатом

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static int index = -1; 
    if (indexPath.row > index) { 
     [tableView sendSubviewToBack:cell]; 
    } 
    else { 
     [tableView bringSubviewToFront:cell]; 
    } 
    index = indexPath.row; 
} 

или вы можете implment внутреннюю тень и не рисовать за пределами границ.

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