Панель навигации setBackgroundImage не работает на iOS15

      - (void)viewDidLoad {
   [super viewDidLoad];
   [self.navigationController.navigationBar setBackgroundImage:xxx] forBarMetrics:UIBarMetricsDefault];
   [self.navigationController.navigationBar setBarTintColor:[UIColor redColor]];
}

он отлично работает на iOS14. но на iOS15 бета-версия XCode13 больше не работает.

4 ответа

OC:

      if (@available(iOS 13.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 13.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
            }

быстрый:

      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)
    }

просто используйте этот код, фоновое изображение может работать в 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;
}

У меня такая же проблема, и вот мой код:

      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;
    }
Другие вопросы по тегам