透明导航栏

时间:2018-08-06 21:46:09

标签: objective-c uinavigationbar

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

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

Example

出什么问题了?如何设置原始导航栏的色调颜色?

0 个答案:

没有答案