2012-01-25 16 views
16

私は、左と右にドロップシャドウを追加したいプレーンなUITableView(グループ化されていない)を持っています。UITableViewにドロップシャドウを追加する

enter image description here

私はこれをどのように達成することができますか?私は試しました:

[self.tableView.layer setShadowColor:[[UIColor whiteColor] CGColor]]; 
[self.tableView.layer setShadowOffset:CGSizeMake(0, 0)]; 
[self.tableView.layer setShadowRadius:5.0]; 
[self.tableView.layer setShadowOpacity:1]; 

しかし、動作しません。

+4

'clipToBounds'と' maskToBounds'が 'NO'(ビューとレイヤーに対してそれぞれ)に設定されていることを確認しましたか? – mattjgalloway

+0

ありがとうございます、あなたは正しいです!あなたが答えを加えると、私はそれを正解とマークします。 –

+0

回答しました。うれしいことにそれを解決! – mattjgalloway

答えて

43

ビューとレイヤーでそれぞれclipsToBoundsmasksToBoundsNOに設定されていることを確認する必要があります。私は私の解決策を共有したいと思います

self.tableView.clipsToBounds = NO; 
self.tableView.layer.masksToBounds = NO; 
+4

情報ありがとうございます。しかし、tableView.layer.masksToBounds = NOを設定した場合、 &tableView.clipsToBounds = NO;私のtableviewcellはtableviews boundsの上に移動します。私はtableview、私のviewControllerのimageviewを持っています。したがって、一部の部分はテーブルビューで使用され、一部はiamgeviewによって使用されます。あなたはそれで私を助けることができますか? – iOSAppDev

+0

@iOSAppDev私の答えを見てください。実行中の問題を防ぐことができます。 –

+2

UITableViewの後ろにUIViewを置き、UIViewに影を追加する方がよいでしょう。 – filou

0

白い光ではありません私は影を見ていますか?オフセットは設定されていないので、正確に何をしたいのですか?影の場合、色を黒に設定し、それに3,5などのオフセットを与えます。

+0

いいえ、その画像私が達成しようとしてきたものです。今、私はmattjgallowayコメントで修正しました。とにかくありがとう。 –

4

: これはのはshowShadowそれを呼ぶことのUITableViewをサブクラス化し、デモンストレーションのために、プロパティを追加する必要があります。 getterメソッドとsetterメソッドを作成するために、.mファイル内

@property (nonatomic,assign) BOOL showShadow;

とそれに対応する@synthesize:あなたのテーブルビューの.hファイルにこれを追加

@synthesize showShadow;

その後IVAR UIView *shadowView;を追加テーブルビューの.hファイルに追加します。

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 

     shadowView = [[UIView alloc]initWithFrame:self.frame]; 
     shadowView.backgroundColor = [UIColor whiteColor]; 
     shadowView.layer.shadowOpacity = 0.1; 
     shadowView.layer.shadowOffset = CGSizeMake(3, 3); 
     shadowView.layer.shadowRadius = 1; 



    } 
    return self; 
} 

そして、最後に、影を隠す/表示するためにsetterメソッドを記述します。 は、今すぐあなたのサブクラスのUITableViewの- (id)initWithFrame:(CGRect)frame方法で最終的に影を落としますビューを設定するために次のコードを追加します。

-(void)setShowShadow:(BOOL)s{ 

    showShadow = s; 

    if(s){ 
     [self.superview insertSubview:shadowView belowSubview:self]; 
    }else{ 
     [shadowView removeFromSuperview]; 
    } 
} 

あなたが(何らかの理由で)テーブルを移動したい場合はまた、あなたはまた、それに伴いshadowViewを移動するために-setFrame:メソッドをオーバーライドする必要があります(これはテーブルビューのビュー階層ではありませんよう):

-(void)setFrame:(CGRect)frame{ 

    [super setFrame:frame]; 
    shadowView.frame = frame; 

} 

正常にシャドウを有効にしました!このようにそれを使用します。

MySubclassedTableView *table = [[MySubclassedTableView alloc]initWithFrame:CGRectMake(20, 200, 280, 200)]; 
     [self.view addSubview:table]; 
     table.showShadow = YES; 

WARNING:あなたがラインtable.showShadowがラインを呼び出しますので、あなたは、あなたのテーブルビューを追加 AFTER showShadowプロパティを設定する必要が

[自己を.superview insertSubview:shadowView belowサブビュー:自己];テーブルビューが存在する必要があります。

関連する問題