透明 UINavigationBar

Posted

技术标签:

【中文标题】透明 UINavigationBar【英文标题】:Transparent UINavigationBar 【发布时间】:2014-02-18 10:18:38 【问题描述】:

我是 ios 的新手,我找到了使 UINavigationBar 透明的解决方案。 我可以在我的项目文件中的哪个位置放置此代码

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

这样它就可以应用于我正在使用导航控制器的整个项目中。

【问题讨论】:

好的..你有什么问题? viewDidLoaddidFinishLunchWithOptions 的appDelegate 文件中 我将该代码粘贴到我的 appDelegate 中,但它并没有使导航栏透明。有什么我应该改变的吗?对不起..开始学习ios :) 也许你忘记了这个self.navigationController.view.backgroundColor = [UIColor clearColor]; 应用程序在我引入 [UINavigationBar 外观] 时崩溃。translucent = YES;出现的错误是:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** 非法属性类型,c 用于外观设置器,_installAppearanceSwizzlesForSetter:” 【参考方案1】:

在你的rootViewController的viewDidLoad函数中加入这段代码:

目标-C:

[self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                     forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
self.navigationController.view.backgroundColor = [UIColor clearColor];

斯威夫特 2.x:

if let navigationBar = navigationController?.navigationBar 
        navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
        navigationBar.shadowImage = UIImage()
        navigationBar.translucent = true
        navigationController?.view.backgroundColor = .clearColor()
    

斯威夫特 3:

if let navigationBar = navigationController?.navigationBar 
        navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationBar.shadowImage = UIImage()
        navigationBar.isTranslucent = true
        navigationController?.view?.backgroundColor = .clear
    

这肯定有效! Transparent UINavigationBar.

【讨论】:

这是我的 appDelegate [[UINavigationBar 外观] setBackgroundImage:[UIImage new]forBarMetrics:UIBarMetricsDefault]; [UINavigationBar 外观].shadowImage = [UIImage new]; [UINavigationBar 外观].translucent = YES;当我运行时,应用程序崩溃并出现此错误 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:' 通过使用断点,它指向设置错误半透明 如果我可以再给 5 个 +1,那么我会的。这是一个很好的解决方案 推送时如何在下一个视图中停用导航栏透明度 只需使用相同的代码还原它,但输入您喜欢的颜色并将translucent 设置为NO 你刚刚为我节省了大量时间。非常感谢您的解决方案。【参考方案2】:

如果您想更改所有应用程序的外观,我建议您使用这个:

[[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];

希望对你有帮助

【讨论】:

我试过了,但它并没有让它看穿。【参考方案3】:

在你的 UIViewController 类中。也可以使用 UIAppearance 机制http://nshipster.com/uiappearance/

然后放置这个

    [[UINavigationBar appearance] setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
    [UINavigationBar appearance].shadowImage = [UIImage imageNamed:@"Your image file here"];

进入

- ( BOOL ) application:( UIApplication* ) application didFinishLaunchingWithOptions:( NSDictionary* ) launchOptions

【讨论】:

当我引入这一行时应用程序崩溃 [UINavigationBar appearance].translucent = YES; 收到此错误 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*** 非法属性类型,c 用于外观设置器,_installAppearanceSwizzlesForSetter:' 是的,对不起。 translucent 不是外观选择器。你可以在这里找到外观选择器的完整列表gist.github.com/mattt/5135521【参考方案4】:
Transparent UIToolbar:
self.toolbar.setBackgroundImage(UIImage(),
                                forToolbarPosition: UIBarPosition.Any,
                                barMetrics: UIBarMetrics.Default)
self.toolbar.setShadowImage(UIImage(),
                            forToolbarPosition: UIBarPosition.Any)
Transparent UINavigationBar:
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationBar.shadowImage = UIImage()
self.navigationBar.translucent = true

【讨论】:

【参考方案5】:

设置以下代码

Self.navigationcontroller.navigationbar.transculant=yes;

【讨论】:

以上是关于透明 UINavigationBar的主要内容,如果未能解决你的问题,请参考以下文章

如何使DIV背景透明内容不透明

DUILIB库怎么实现背景透明,文字和图标不透明

透明控件(透明容器中的非透明控件)

JS实现背景透明度可变,文字不透明的效果

VB窗体透明问题!

Vue设置背景色透明度字体不透明