透明 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;
这样它就可以应用于我正在使用导航控制器的整个项目中。
【问题讨论】:
好的..你有什么问题? 在viewDidLoad
或didFinishLunchWithOptions
的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的主要内容,如果未能解决你的问题,请参考以下文章