我只想在导航堆栈中的一个控制器中创建一个透明的导航栏。我要坚持使用系统UINavigationBar。
我的方法如下:
在不应具有透明导航栏的控制器中:
- (void)setupNavBar {
UINavigationBar *navBar = self.navigationController.navigationBar;
if (!navBar) return;
[navBar setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
navBar.shadowImage = nil;
navBar.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
for (UIView *view in navBar.subviews) {
view.layer.shadowOpacity = 0;
view.exclusiveTouch = YES;
}
}
在应该具有透明导航栏的控制器中:
- (void)setupNavBar {
UINavigationBar *navBar = self.navigationController.navigationBar;
if (!navBar) return;
navBar.tintColor = [UIColor whiteColor];
// Mark nav bar invisible
[navBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
navBar.shadowImage = [UIImage new];
navBar.translucent = YES;
navBar.backgroundColor = [UIColor clearColor];
// Add shadow to buttons
Class navigationBarContentViewClass = NSClassFromString(@"_UINavigationBarContentView");
if (navigationBarContentViewClass) {
for (UIView *view in navBar.subviews) {
if ([view isKindOfClass:navigationBarContentViewClass]) {
view.layer.shadowOffset = CGSizeMake(0, 2);
view.layer.shadowOpacity = 0.9f;
view.layer.shadowRadius = 4.f;
}
view.exclusiveTouch = YES;
}
}
}
当我只有默认的半透明光源导航栏时,似乎工作正常,但是当我将其设置为半透明黑色或使用自定义色调颜色时,大标题背景仍为白色:
出什么问题了?如何设置原始导航栏的色调颜色?