【问题标题】:How to set navigation bar to transparent in iOS 11如何在 iOS 11 中将导航栏设置为透明
【发布时间】:2018-03-05 22:51:26
【问题描述】:

如何在 iOS 11 中将导航栏设置为透明并从普通到透明平滑过渡?

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

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

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

【问题讨论】:

  • 你试过uicolor.clearcolor吗?

标签: ios objective-c swift uinavigationbar ios11


【解决方案1】:
  • 在情节提要中设置“视图控制器的顶部栏下方”,这样您的视图将位于导航栏下方

  • 使用框架 {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];
}

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

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

【讨论】:

  • 这样,我必须在每个视图控制器中添加这个视图,我认为这不是一个简单的方法。
  • 是的。但在这种情况下,您只使用公共 api。用于创建透明导航栏的代码您可以转移到 uinavigationcontroller 的类别。创建彩色标题视图的代码——在 uiviewcontroller 子类中。
  • ``` [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; ```就这2行
  • 恕我直言,导航栏下方的视图背景颜色也非常重要,因为导航栏(_UIBarBackground)也尝试混合下面的颜色。如果视图背景颜色是纯白色。那么导航栏对查看者来说可能不是透明的
猜你喜欢
  • 2018-03-05
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多