我想在导航堆栈中的一个控制器中创建透明导航栏 . 我想坚持使用系统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;
        }
    }
}

当我只有默认的半透明灯光导航栏时似乎工作正常,但是当我将其设置为半透明黑色或使用自定义色调时,大 Headers 背景仍为白色:

Example

有什么问题?如何将原始导航栏色调设置回来?