iOS导航栏设置透明而不生效
这是我的代码:iOS导航栏设置透明而不生效,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,这是我的代码: - (void)viewDidLoad { [super viewDidLoad]; [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setShadowImage:[UIImage new]]; } 但是
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
但是导航栏还是灰色的,为什么
在一个新的项目中,这段代码还可以。我可能会说一些显而易见的事情,但是你试过了吗
[self.navigationController.navigationBar setBackgroundColor:[UIColor clearColor]];
我已经使用以下代码更改了颜色
self.navigationController.navigationBar.barTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"greenPatter.png"]];
CGRect bgFrame = self.navigationController.navigationBar.bounds;
bgFrame.origin.y -= 20.0;
bgFrame.size.height += 20.0;
UIView *backgroundView = [[UIView alloc] initWithFrame:bgFrame];
backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"greenPatter.png"]];
backgroundView.alpha = 0.6;
[self.navigationController.navigationBar addSubview:backgroundView];
[self.navigationController.navigationBar sendSubviewToBack:backgroundView];
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
greenPatter.png是绿色的图像,
您还可以替换
self.navigationController.navigationBar.barTintColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"greenPatter.png"]];
到
这对我有用。
请尝试告诉我。以下代码运行良好
UINavigationBar *bar = [UINavigationBar appearance];
[bar setBackgroundImage:[UIImage imageNamed:@"navbg"] forBarMetrics:UIBarMetricsDefault];
要设置透明,我使用以下代码
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];
self.navigationController.navigationBar.barTintColor = [UIColor clearColor];
[super viewWillAppear:animated];
}
然后把颜色恢复过来
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController.navigationBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = nil;
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
[super viewWillDisappear:animated];
}
在
AppDelegate.m
类中使用此代码
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"topbar-bg"] forBarMetrics:UIBarMetricsDefault];
一个完全透明的导航栏:
- (void)transparentNavigationBar {
UINavigationBar *navBarAppearance = [UINavigationBar appearance];
[navBarAppearance setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
[navBarAppearance setShadowImage:[UIImage new]];
[navBarAppearance setTranslucent:YES];
}
如果要使其半透明,请将“半透明”设置为“否”,并将所需的batTintColor设置为alpha<1。无效,则条形图颜色为gray@sands.yu这很奇怪,它在几个应用程序中对我有效。这没关系,但是“下一个视图控制器”动画有一个问题…我想我可以解决这个问题。我想我们必须在每个视图控制器上粘贴。我这么做了,如果你有别的办法,请告诉我。
- (void)transparentNavigationBar {
UINavigationBar *navBarAppearance = [UINavigationBar appearance];
[navBarAppearance setBackgroundImage:[UIImage new]
forBarMetrics:UIBarMetricsDefault];
[navBarAppearance setShadowImage:[UIImage new]];
[navBarAppearance setTranslucent:YES];
}