如何在iOS7中绘制透明的UIToolbar或UINavigationBar

Ben*_*ard 87 uinavigationbar uitoolbar uinavigationcontroller ios ios7

我想完全透明UIToolbar和/或UINavigationBar.我已经尝试过为iOS 5之前和之后建议的各种咒语,但似乎没有任何工作.

如何在iOS 7中实现这一目标?

Gab*_*lla 301

Swift 3(iOS 10)

透明 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: .any,
                                barMetrics: .default)
self.toolbar.setShadowImage(UIImage(), forToolbarPosition: .any)
Run Code Online (Sandbox Code Playgroud)

透明 UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.isTranslucent = true
Run Code Online (Sandbox Code Playgroud)

斯威夫特<3

透明 UIToolbar

self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: UIBarPosition.Any,
                                barMetrics: UIBarMetrics.Default)
self.toolbar.setShadowImage(UIImage(),
                            forToolbarPosition: UIBarPosition.Any)
Run Code Online (Sandbox Code Playgroud)

透明 UINavigationBar

self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true
Run Code Online (Sandbox Code Playgroud)

Objective-C的

透明 UIToolbar

[self.toolbar setBackgroundImage:[UIImage new]
              forToolbarPosition:UIBarPositionAny
                      barMetrics:UIBarMetricsDefault];
[self.toolbar setShadowImage:[UIImage new]
          forToolbarPosition:UIBarPositionAny];
Run Code Online (Sandbox Code Playgroud)

透明 UINavigationBar

[self.navigationBar setBackgroundImage:[UIImage new]
                         forBarMetrics:UIBarMetricsDefault];
self.navigationBar.shadowImage = [UIImage new];
self.navigationBar.translucent = YES;
Run Code Online (Sandbox Code Playgroud)

讨论

由于文档中讨论的行为,导航栏上的设置translucent可以YES解决问题UINavigationBar.我将在这里报告相关的片段:

如果将此属性设置为YES具有不透明自定义背景图像的导航栏,则导航栏将对图像应用小于1.0的系统不透明度.


最后结果

最后结果

  • 截图来自"iOS 7"模拟器 (2认同)
  • 如果使用edgesForExtendedLayout = UIRectEdgeNone,您可能希望实现自定义转换.因为否则,在推送视图时,默认过渡将在动画期间在透明栏下创建暗闪烁.仅供参考,这是基本滑动过渡的快速资源:https://gist.github.com/ArtFeel/7690431 (2认同)

Ada*_*ite 7

如果您想通过整个应用程序执行此操作,则应使用UIAppearance代理(iOS5 +):

UINavigationBar *navigationBarAppearance = [UINavigationBar appearance]; navigationBarAppearance.backgroundColor = [UIColor clearColor]; [navigationBarAppearance setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; navigationBarAppearance.shadowImage = [[UIImage alloc] init];

文档:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html

文章:http://nshipster.com/uiappearance/