22

layer.shadowColor、Offset、Radius を使用して UITableViewCell に影を追加しようとしていますが、影響はないようです。テーブルはグループ化されたスタイルです。理由はありますか?

ここに私が使用しているコードがあります:

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

3 に答える 3

62

影の不透明度も設定する必要があります。デフォルトは 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 セッション ビデオ

于 2011-02-14T22:54:27.003 に答える
19

Swiftに@Paul Soultの回答を追加するだけです:

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
于 2015-09-28T20:42:51.563 に答える
2

グループ化されたテーブルビューセルのビュー階層は、実際にはかなり不透明です。cell.layerは、実際にはセルのメインビューのレイヤーを参照しており、テーブルの幅全体を占めています。挿入されているセルの丸みを帯びた部分は、実際には、グループ化されたセルを描画するためのアップルのプライベートメソッドによって処理されます。

UITableViewCellのカスタムサブクラスを作成することで、より多くの運が得られるでしょう。

于 2010-08-23T21:00:30.747 に答える