如何在 iOS 11 中将导航栏设置为透明

Kle*_*oke 5 objective-c uinavigationbar ios swift ios11

如何在 iOS 11 中将导航栏设置为透明并实现从正常到透明的平滑过渡?

在 iOS 11 之前,我找到了_UIBarBackground视图并将其设置alpha在 中viewWillAppear:,并且在弹出、推入和向后滑动时效果很好。

但是在 iOS 11 中,_UIBarBackground的 alpha 会在之后viewDidAppear自动设置为 1 。

所以我想知道,还有其他完美的解决方案吗?

Jos*_*had 3

  • 在故事板中设置“在视图控制器的顶部栏下”,这样您的视图将位于导航栏下方

  • 使用框架 {0,0,screenWidth,64} 将子视图添加到视图中,或对其使用自动布局约束。

  • 设置该视图的背景颜色:

在此输入图像描述

将导航栏的背景设置为透明:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new]
                             forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
    self.navigationController.view.backgroundColor = [UIColor clearColor];
    self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
}
Run Code Online (Sandbox Code Playgroud)

现在您可以通过动画将黄色视图更改为透明

示例项目: https: //github.com/josshad/AnimatedNavBar