使UINavigationBar透明
你如何使UINavigationBar透明 ? 虽然我希望它的酒吧项目保持可见。
如果有人想知道如何在iOS 7+中实现这一点,这里有一个解决scheme(iOS 6兼容)
在Objective-C中
[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationBar.shadowImage = [UIImage new]; self.navigationBar.translucent = YES;
在swift 3(iOS 10)
self.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationBar.shadowImage = UIImage() self.navigationBar.isTranslucent = true
在迅速2
self.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationBar.shadowImage = UIImage() self.navigationBar.translucent = true
讨论
由于UINavigationBar
文档中讨论的行为,在导航栏上将translucent
设置为YES
实现这一function。 我会在这里报告相关的片段:
如果在具有不透明的自定义背景图像的导航栏上将此属性设置为
YES
,则导航栏会将小于1.0的系统不透明度应用于图像。
在iOS5中,您可以这样做,使导航栏透明:
nav.navigationBar.translucent = YES; // Setting this slides the view up, underneath the nav bar (otherwise it'll appear black) const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *img = [[UIImage alloc] init]; UIImage *maskedImage = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors(img.CGImage, colorMask)]; [nav.navigationBar setBackgroundImage:maskedImage forBarMetrics:UIBarMetricsDefault]; [img release];
从IOS7:
self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.view.backgroundColor = [UIColor clearColor]; [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
对于任何想在Swift 2.x中执行此操作的人:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.translucent = true
或Swift 3.x:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true
这似乎工作:
@implementation UINavigationBar (custom) - (void)drawRect:(CGRect)rect {} @end navigationController.navigationBar.backgroundColor = [UIColor clearColor];
我知道这个主题是旧的,但如果人们想知道如何完成,没有重载drawRect方法。
这是你需要的:
self.navigationController.navigationBar.translucent = YES; self.navigationController.navigationBar.opaque = YES; self.navigationController.navigationBar.tintColor = [UIColor clearColor]; self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
在做了上面所有人的说明之后,即:
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.isTranslucent = true
我的导航栏还是白色的 所以我加了这一行:
navigationController?.navigationBar.backgroundColor = .clear
等瞧! 这似乎是诀窍。
尝试下面的一段代码:
self.navigationController.navigationBar.translucent = YES;
下面的代码展开了为这个线程select的最佳答案,以摆脱下边框和设置文本颜色:
-
此代码的最后两个编码行设置透明度。 我借用了这个线程的代码,它完美的工作!
-
“clipsToBounds”属性是我find的代码,它没有设置透明度(或所以如果你决定去一个纯白色/黑色/等背景,而不会有边界线)摆脱底部边界线。
-
“tintColor”行(第二条编码行)将我的后退button设置为浅灰色
-
我保留barTintColor作为备份。 我不知道透明度为什么不起作用,但如果不行的话,我想要我的白色,就像我以前那样
var navigationBarAppearace = UINavigationBar.appearance() navigationBarAppearace.tintColor = UIColor.lightGrayColor() navigationBarAppearace.barTintColor = UIColor.whiteColor() navigationBarAppearace.clipsToBounds = true navigationBarAppearace.translucent = true navigationBarAppearace.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationBarAppearace.shadowImage = UIImage()
对于Swift 3.0:
override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.isTranslucent = true }
C#/ Xamarin解决scheme
NavigationController.NavigationBar.SetBackgroundImage(new UIImage(), UIBarMetrics.Default); NavigationController.NavigationBar.ShadowImage = new UIImage(); NavigationController.NavigationBar.Translucent = true;
你的意思是完全透明的,还是使用照片应用中看到的半透明黑色风格? 后者可以通过将barStyle
属性设置为barStyle
来UIBarStyleBlackTranslucent
。 前者…我不确定。 如果您希望它上面的项目仍然可见,则可能需要在酒吧的视图层次结构中进行一些挖掘,并移除包含其背景的视图。
另一种方法,我的工作是子类UINavigationBar并将drawRect方法留空!
@IBDesignable class MONavigationBar: UINavigationBar { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code }}
这适用于Swift 2.0。
navigationController!.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationController!.navigationBar.shadowImage = UIImage() navigationController!.navigationBar.translucent = true