Подтвердить что ты не робот

Тень iPhone UITableViewCell

Я пытаюсь добавить тень в UITableViewCell, используя layer.shadowColor, Offset, Radius, но это никак не влияет на него. Таблица сгруппирована. Любые идеи, почему?

Вот код, который я использую:

cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
4b9b3361

Ответ 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.