【问题标题】:navigationbar setBackgroundImage not working on iOS15导航栏 setBackgroundImage 在 iOS15 上不起作用
【发布时间】:2021-09-04 11:09:21
【问题描述】:
- (void)viewDidLoad {
   [super viewDidLoad];
   [self.navigationController.navigationBar setBackgroundImage:xxx] forBarMetrics:UIBarMetricsDefault];
   [self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
}

它在 iOS14 上完美运行。 但在 iOS15、XCode13 beta 上,它不再工作了。

【问题讨论】:

    标签: ios15


    【解决方案1】:

    我有同样的问题,这是我的代码:

    if (@available(iOS 15.0, *)) {
            UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
            [appearance configureWithOpaqueBackground];
            //appearance.backgroundColor = [UIColor blueColor];
            appearance.shadowColor = [UIColor whiteColor];
            appearance.titleTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:24.0/255.0 green:44.0/255.0 blue:122.0/255.0 alpha:1.0f], NSForegroundColorAttributeName,[UIFont fontWithName:@"AvenirNext-Demibold" size:21], NSFontAttributeName,nil];
            appearance.backgroundImage = [UIImage imageNamed:@"Bg_portrait_540x120_1.png"];
            self.navigationController.navigationBar.standardAppearance = appearance;
            self.navigationController.navigationBar.scrollEdgeAppearance = self.navigationController.navigationBar.standardAppearance;
        }
    

    【讨论】:

      【解决方案2】:

      超频:

      if (@available(iOS 15.0, *)) {
          UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
          [appearance configureWithOpaqueBackground];
          appearance.backgroundColor = [UIColor whiteColor];
          appearance.shadowColor = [UIColor whiteColor];
          appearance.shadowImage = [UIImage imageWithColor:[UIColor whiteColor]];
          self.navigationController.navigationBar.standardAppearance = appearance;
          self.navigationController.navigationBar.scrollEdgeAppearance = self.navigationController.navigationBar.standardAppearance;
      }
          
      

      斯威夫特:

      if #available(iOS 15.0, *) {
          let appearance = UINavigationBarAppearance()
          appearance.configureWithOpaqueBackground()
          appearance.backgroundColor = .white
          appearance.shadowColor = .white
          appearance.shadowImage = UIImage.color(.white)
          navigationController?.navigationBar.standardAppearance = appearance
          navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
      }
      

      【讨论】:

      【解决方案3】:

      迅速:

      if #available(iOS 15.0, *) {
              let appearance = UINavigationBarAppearance()
              appearance.configureWithTransparentBackground()
              appearance.backgroundImage = image
              navigationController?.navigationBar.standardAppearance = appearance
              navigationController?.navigationBar.scrollEdgeAppearance = navigationController?.navigationBar.standardAppearance
          }else{
              self.navigationController?.navigationBar.setBackgroundImage(image, for: .default)
          }
      

      【讨论】:

        【解决方案4】:

        只要使用这段代码,背景图片就可以在iOS 15中使用

        if (@available(iOS 13.0, *)) {
          UINavigationBarAppearance *navigationBarAppearance = [UINavigationBarAppearance new];
          [navigationBarAppearance configureWithOpaqueBackground];
          [navigationBarAppearance setBackgroundImage:image];
          self.navigationController.navigationBar.scrollEdgeAppearance = navigationBarAppearance;
          self.navigationController.navigationBar.standardAppearance = navigationBarAppearance;
        }
        

        【讨论】:

        • 至于 iOS 15.0 --- 在 navigationBarAppearance 对象上设置背景图片确实起到了作用。我花了不合理的时间来弄清楚这一点。因此,与其在 UINavigationBar 对象上使用 setBackgroundImage,不如在 UINavigationBarAppearance 对象上使用。前者对我的导航栏没有任何影响。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2019-01-15
        • 2017-09-23
        • 1970-01-01
        • 2017-03-06
        相关资源
        最近更新 更多