UINavigationbar 的阴影效果,如 GameCenter
我想为 UINavigationbar 添加阴影效果,如 GameCenter。
我认为将带有阴影的背景图像应用于导航栏,但标题的行高会降低。 我将阴影绘制到背景上,但背景图像不会滚动。
这个案例的最佳实践是什么?
I want to add shadow effect for UINavigationbar like GameCenter.
I think apply background image with shadow to nav bar, but title's line height would be down.
And I draw shadow to background, but background image would not scroll.
What is the best Practice of this case??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以子类化 UINavigationController,然后为每个导航设置一个阴影层,或者如果您的栏始终可见,只需将阴影添加到 UIWindow(整个应用程序只有一个),然后每次添加子视图时将其设为最前面的视图。
如果您选择后一种情况,则覆盖 didAddSubview 以使该层位于最前面:
希望它有帮助。
You can subclass UINavigationController and then have a shadow layer for each navigation or if your bar is always visible just add the shadow to UIWindow (only one for the entire application) and then make it the frontmost view each time you add a subview.
If you choose the latter case then override the didAddSubview to make the layer the frontmost:
Hope it helps.
使用 UINavigationController 的自定义子类可以轻松完成。关键是覆盖 -viewWillAppear: 并将子层添加到 UINavigationController 的视图层:
navigationBarBottom 负责 UINavigationBar 和状态栏。
渐变层参数的功劳归功于 Marcio。
It's easly done with custom subclass of UINavigationController. The key is to overwrite -viewWillAppear: and add sublayer to UINavigationController's view's layer:
navigationBarBottom accounts for both UINavigationBar and status bar.
Credit for gradient layer parameters goes to marcio.
绘制
CAGradientLayer
会产生非常均匀的阴影,但 - 在我看来 - 看起来相当不自然的阴影。这是基于问题 带有阴影的 UIView 的答案的替代方法。
它使用
CALayer
的各种阴影属性来提供阴影效果:相同的技术适用于
tabBarController
的tabBar
;Drawing a
CAGradientLayer
gives a very uniform, but - in my opinion - a rather unnatural looking shadow.Here's an alternative approach based upon the answer to question UIView with shadow.
It uses the various shadow properties of
CALayer
to give the shadow effect:The same technique works with the
tabBarController
'stabBar
;