2

UITableView を持つ UIViewController があります。は、ビュー コントローラーのビューの内側にあり、すべての側面にパディングがあります。テーブル ビューと丸みを帯びた角からドロップ シャドウを描画しようとしていますが、両方を同時に実現することはできません。次のコードを試してみて、masksToBounds のオンとオフを切り替えましたが、NO に設定すると、シャドウ スクロールで非常に奇妙な効果が生じ、呼び出しがテーブル内でクリッピングされません。

[self.tableView.layer setShadowColor:[UIColor blackColor].CGColor];
[self.tableView.layer setShadowOffset:CGSizeMake(0, 3)];
[self.tableView.layer setShadowOpacity:0.4];
[self.tableView.layer setShadowRadius:3.0f];
[self.tableView.layer setCornerRadius:5.0f];
[self.tableView.layer setShadowPath:[[UIBezierPath bezierPathWithRoundedRect:self.tableView.bounds cornerRadius:5.0f] CGPath]];

私もプレーンなスタイルで UITableView を描いています。私が達成しようとしている効果は、無料アプリTransit Appで見ることができます。これは影が残っているのを見ることができるムービーで、テーブルには上下にスクロールするマスクさえあります。

私は検索して検索しましたが、他のSOの回答やオンライン記事に基づいて解決策をまとめることができませんでした. 助けていただければ幸いです。

4

6 に答える 6

5

以下のリンクを試してみてください。古いものもありますが、ポインタを得ることができます。

カスタム テーブル効果

ドロップシャドウ 2

クールなテーブルビュー

影を落とす

わかった!!私はもう一度試みて効果を得ました、それは再び(画像を使用する代わりに)回避策です。

テーブルビューと同じフレームでCALayerを作成し、同じ曲線を与え、すべて、このレイヤーの上にテーブルビューを追加します。

CALayer *sublayer = [CALayer layer];
sublayer.backgroundColor = [UIColor blueColor].CGColor; // If you dont give this, shadow will not come, dont know why
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 1.0;
sublayer.cornerRadius = 5.0;
sublayer.frame = CGRectMake(myTable.frame.origin.x, myTable.frame.origin.y, myTable.frame.size.width, myTable.frame.size.height);
[self.view.layer addSublayer:sublayer];

[self.view.layer addSublayer:myTable.layer];

あっ!! 何らかの理由で、マシン、ファイアウォールからスクリーンショットをアップロードできません;-)。自宅からやってみます。

ここに画像の説明を入力

-アヌープ

于 2012-07-31T12:18:19.257 に答える
0

これを試して

UITableView * objTableview=[[UITableView alloc]initWithFrame:CGRectMake(x, y, w, h)];

UIView * objViewShadow=[[UIView alloc]initWithFrame:objTableview.bounds];

objTableview.layer.cornerRadius=5;

// add shadow

objViewShadow.layer.shadowOffset = CGSizeMake(0, 3);

objViewShadow.layer.shadowRadius = 5.0;

objViewShadow.layer.shadowColor = [UIColor blackColor].CGColor;

objViewShadow.layer.shadowOpacity = 0.8;

[objViewShadow addSubview:objTableview];

[self.view addSubview:objViewShadow];
于 2014-09-16T13:43:22.240 に答える
0

大きなテーブルビューのドロップ シャドウには画像を使用することをお勧めします。すべての描画にはパフォーマンスが低下する可能性があり、ユーザー エクスペリエンスが低下する可能性があります。

于 2012-07-31T14:20:39.977 に答える
0

これはかなり古い質問であることは知っていますが、最近同じ問題が発生し、ここでの解決策は良い例でしたが、十分ではありませんでした. ここでは、テーブル ビューの影を作成するために使用している方法を示します。他のビューにも使用できます。

-(void)makeShadowToView:(UIView*) view withHeight:(CGFloat)shadowHeight
{
    CGRect bounds = view.frame;
    bounds.size.height = shadowHeight;
    view.clipsToBounds = NO; // Without this row it doesn't display any shadow, at least for a table view
    view.layer.shadowColor = [UIColor blackColor].CGColor;
    view.layer.shadowOpacity = 0.9f;
    view.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
    view.layer.shadowRadius = 5.0f;
    view.layer.shadowPath = [UIBezierPath bezierPathWithRect:bounds].CGPath;
}

使用例:テーブル コンテンツの高さに応じて影の高さを再計算する場合に追加されます[self makeShadowToView:self.view withHeight:height];height

于 2013-05-31T13:23:25.643 に答える