像GameCenter这样的UINavigationbar的阴影效果

Shu*_*112 6 iphone uinavigationbar uikit

我想为像GameCenter这样的UINavigationbar添加阴影效果.

我认为将带有阴影的背景图像应用于导航栏,但标题的行高会降低.我在背景中绘制阴影,但背景图像不会滚动.

这个案子最好的做法是什么?

mar*_*cio 5

您可以为UINavigationController创建子类,然后为每个导航创建一个阴影层,或者如果您的栏始终可见,只需将阴影添加到UIWindow(整个应用程序只有一个),然后在每次添加子视图时将其设置为最前面的视图.

CGColorRef darkColor = [[UIColor blackColor] colorWithAlphaComponent:.5f].CGColor;
CGColorRef lightColor = [UIColor clearColor].CGColor;

CAGradientLayer *newShadow = [[[CAGradientLayer alloc] init] autorelease];
newShadow.frame = CGRectMake(0, self.navigationBar.frame.size.height, self.navigationBar.frame.size.width, 10);
newShadow.colors = [NSArray arrayWithObjects:(id)darkColor, (id)lightColor, nil];

[self.navigationBar.layer addSublayer:newShadow];
Run Code Online (Sandbox Code Playgroud)

如果选择后一种情况,则覆盖didAddSubview以使图层成为最前面的图层:

CALayer *superlayer = self.shadowLayer.superlayer;
[self.shadowLayer removeFromSuperlayer];
[superlayer addSublayer:self.shadowLayer];
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.