Layer.shadowColor、Offset、Radiusを使用してUITableViewCellに影を追加しようとしていますが、まったく影響がないようです。テーブルはグループ化されたスタイルです。なぜ何かアイデアはありますか?
これが私が使用しているコードです:
cell.layer.shadowColor= [UIColor blackColor].CGColor;
cell.layer.shadowRadius = 5.0;
cell.layer.shadowOffset = CGSizeMake(10, 10);
シャドウの不透明度も設定する必要があります。デフォルトは0で、明示的に設定しないと何も表示されません。
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セッションビデオ
Swiftに@PaulSoultの回答を追加するだけです。
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
グループ化されたテーブルビューセルのビュー階層は、実際にはかなり不透明です。 cell.layerは、実際にはセルのメインビューのレイヤーを指し、テーブルの幅全体を占めます。挿入されているセルの丸みを帯びた部分は、実際には、グループ化されたセルを描画するためのAppleのプライベートメソッドによって処理されます。
UITableViewCellのカスタムサブクラスを作成することで、より多くの運が得られるでしょう。