2015-12-08 10 views
8

enter image description hereはUINavigationバーのシャドウ効果を追加する方法

こんにちは、私はそれを行うことができますどのように私のNAvigationBarのための影のこの種を追加します。

これは、シャドウを追加しようとした方法です。

[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
self.navigationController.navigationBar.shadowImage=[UIImage new]; 

self.navigationController.navigationBar.translucent=YES; 

self.navigationController.navigationBar.topItem.titleView.tintColor=[UIColor whiteColor]; 
self.navigationController.navigationBar.titleTextAttributes=[NSDictionary dictionaryWithObject:[UIFont fontWithName:@"HelveticaNeue" size:15.0f] forKey:NSFontAttributeName]; 
self.navigationController.navigationBar.topItem.title=strNavigtionTitle; 
self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backarrow"] style:UIBarButtonItemStylePlain target:self action:@selector(revealToggle :)]; 
[self.navigationController navigationBar].tintColor = [UIColor whiteColor]; 

[self.navigationController navigationBar].layer.shadowColor=[UIColor colorWithRed:53.0/255.0 green:108.0/255.0 blue:130.0/255.0 alpha:1.0f].CGColor; 
[self.navigationController navigationBar].layer.shadowOffset=CGSizeMake(0, 20); 
[self.navigationController navigationBar].layer.shadowOpacity=0.8; 
[self.navigationController navigationBar].layer.shadowRadius=5.5; 

ただし、これは矢印の影と私の残したタイトルのみを追加します。しかし、この画像のような影を追加したいのですが、それはNavigationBarと私のメインUIViewの間でなければなりません。どうすればいいですか?私を助けてください。 ありがとう

+0

出力画像を表示します –

+0

私はパートナーに私に影の背景画像を与えます。 – AechoLiu

+0

ナビゲーションバーの背景画像ですか? – user1960169

答えて

3

を、私はこの方法でそれを達成することができました。私はナビゲーションバーに影を追加することを取り除いた。その代わりに、ナビゲーションバーの下に同じサイズのビューを配置しました。背景色をナビゲーションバーの色に設定します。その後、そのビューの影を追加しました。これは完全に機能しました。

-(void)setupNavigationBar 
{ 
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; 
    self.navigationController.navigationBar.shadowImage=[UIImage new]; 

    self.navigationController.navigationBar.translucent=YES; 
    self.navigationController.navigationBar.topItem.titleView.tintColor=[UIColor whiteColor]; 
    self.navigationController.navigationBar.titleTextAttributes=[NSDictionary dictionaryWithObject:[UIFont fontWithName:@"HelveticaNeue" size:15.0f] forKey:NSFontAttributeName]; 
    self.navigationController.navigationBar.topItem.title=strNavigtionTitle; 
    self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; 
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backarrow"] style:UIBarButtonItemStylePlain target:self action:@selector(revealToggle :)]; 
    [self.navigationController navigationBar].tintColor = [UIColor whiteColor]; 

    UIView *shadow=[[UIView alloc] initWithFrame:CGRectMake(0, 0, dm.screenWidth, 64)]; 
    [shadow setBackgroundColor:[UIColor colorWithRed:62.0/255.0 green:81.0/255.0 blue:119.0/255.0 alpha:1.0]]; 
    shadow.layer.shadowColor=[UIColor colorWithRed:51/255 green:76/255 blue:104/255 alpha:1.0].CGColor; 
    shadow.layer.shadowOffset=CGSizeMake(0, 15); 
    shadow.layer.shadowOpacity=0.12; 
    shadow.layer.shadowRadius=4.5; 
    [self.view addSubview:shadow]; 
} 
12

ここでは、QuartzCoreフレームワークをインポートする必要があります。

self.navigationController.navigationBar.layer.borderColor = [[UIColor whiteColor] CGColor]; self.navigationController.navigationBar.layer.borderWidth=2;// set border you can see the shadow 
self.navigationController.navigationBar.layer.shadowColor = [[UIColor blackColor] CGColor]; 
self.navigationController.navigationBar.layer.shadowOffset = CGSizeMake(1.0f, 1.0f); 
self.navigationController.navigationBar.layer.shadowRadius = 3.0f; 
self.navigationController.navigationBar.layer.shadowOpacity = 1.0f; 
self.navigationController.navigationBar.layer.masksToBounds=NO; 

もう一つ あなたは、このプロパティのデフォルト値は影がレンダリングされていても、それはの境界の外にレンダリングされないことを意味し、YESである

set self.layer.masksToBounds = NO; 

に持っていますそれはあなたがそれを全く見ないことを効果的に意味します。

あなたはどのような方法でこのビューをアニメーション化している場合は、この行を追加する必要があります

self.layer.shouldRasterize = YES; 
+0

これは、ナビゲーションバーのタイトルと矢印アイコンに影を追加します。バー – user1960169

+0

バーの下にあるバー全体にその影を追加します。マスクを設定したことを確認してください.TBoundをNOに設定してください... –

+0

Yeas I masksTobound NO – user1960169

7
self.navigationController.navigationBar.layer.shadowColor = [[UIColor blackColor] CGColor]; 
self.navigationController.navigationBar.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); 
self.navigationController.navigationBar.layer.shadowRadius = 4.0f; 
self.navigationController.navigationBar.layer.shadowOpacity = 1.0f; 
+0

ナビゲーションバーが半透明の場合、このコードはテキストとボタンのアイコンに影を適用します。 – MLBDG

+0

haventはこのコードを半透明で試しました – vaibby

関連する問題