Тень iPhone UITableViewCell
Я пытаюсь добавить тень в UITableViewCell, используя layer.shadowColor, Offset, Radius, но это никак не влияет на него. Таблица сгруппирована. Любые идеи, почему?
Вот код, который я использую:
cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
Ответы
Ответ 1
Вам нужно также установить прозрачность тени, по умолчанию она равна 0, и вы ничего не увидите, если вы явно не установите его.
Справка CALayer
cell.layer.shadowOffset = CGSizeMake(1, 0);
cell.layer.shadowColor = [[UIColor blackColor] CGColor];
cell.layer.shadowRadius = 5;
cell.layer.shadowOpacity = .25;
Также обратите внимание, что если вы не установите теневой путь, у вас будет ужасная производительность на iPhone/iPad. Используйте что-то вроде следующего кода, чтобы установить теневой путь, он устраняет необходимость размытия слоев под вашей табличной ячейкой, чтобы создать "высококачественную" тень.
CGRect shadowFrame = cell.layer.bounds;
CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:shadowFrame].CGPath;
cell.layer.shadowPath = shadowPath;
Смотрите видео 425 (также 424 и 426), чтобы узнать больше о тенях из WWDC 2010 Видеоролики доступны здесь: Видеозапись сеанса WWDC 2010 p >
Ответ 2
Просто добавив ответ @Paul Soult в Swift:
cell?.layer.shadowOffset = CGSizeMake(0, 1)
cell?.layer.shadowColor = UIColor.blackColor().CGColor
cell?.layer.shadowRadius = 1
cell?.layer.shadowOpacity = 0.6
// Maybe just me, but I had to add it to work:
cell?.clipsToBounds = false
let shadowFrame: CGRect = (cell?.layer.bounds)!
let shadowPath: CGPathRef = UIBezierPath(rect: shadowFrame).CGPath
cell?.layer.shadowPath = shadowPath
Ответ 3
Иерархия представлений ячейки сгруппированной таблицы выглядит довольно непрозрачной. cell.layer фактически относится к слою основного вида ячейки, который принимает всю ширину таблицы. Округленная часть ячейки, которая является вставкой, фактически обрабатывается частными методами для рисования сгруппированных ячеек.
Вероятно, вам удастся создать собственный подкласс UITableViewCell.