Прозрачная панель вкладок при появлении дочернего вида навигации iOS 15

#ios #swift #swiftui #uitabbarcontroller #ios15

Вопрос:

У меня есть приложение SwiftUI с панелью вкладок. Если я открою подробное дочернее представление в навигационном представлении, а затем нажму «Назад», панель вкладок станет прозрачной, показывая элементы в ленте под значками на панели вкладок.

  1. В ГЛАВНОЙ ЛЕНТЕ ОТКРОЙТЕ ДЕТАЛЬНОЕ ПРЕДСТАВЛЕНИЕ НАВИГАЦИИ ДЛЯ ДЕТЕЙ. —————

введите описание изображения здесь

  1. ЗАТЕМ, ОКАЗАВШИСЬ ВНУТРИ ПОДРОБНОГО ПРЕДСТАВЛЕНИЯ, НАЖМИТЕ КНОПКУ НАЗАД. —————

введите описание изображения здесь

  1. ВЫ УВИДИТЕ ЭТУ ОШИБКУ. ПАНЕЛЬ ВКЛАДОК БУДЕТ ПРОЗРАЧНОЙ. —————

введите описание изображения здесь

Ответ №1:

С iOS 15 Apple расширила поддержку появления прокрутки в UIKit. Этот параметр по умолчанию создает прозрачный фон панели вкладок.

Чтобы устранить проблему, добавьте приведенный ниже код в файл SceneDelegate, чтобы определить цвет панели вкладок, чтобы SwiftUI не делал ее автоматически прозрачной.

 class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?

func scene(
    _ scene: UIScene,
    willConnectTo session: UISceneSession,
    options connectionOptions: UIScene.ConnectionOptions
) {

    guard let windowScene = (scene as? UIWindowScene) else { return }        

    // MARK: ADD THIS CODE BELOW TO YOUR SCENE DELEGATE.
    
    // TAB BAR BACKGROUND COLOR HERE.
    UITabBar.appearance().barTintColor = UIColor.white
    
    // TAB BAR ICONS COLOR HERE.
    UITabBar.appearance().tintColor = UIColor.blue
    UITabBar.appearance().isTranslucent = true
    
    if #available(iOS 15.0, *) {
        let appearance = UITabBarAppearance()
        appearance.configureWithOpaqueBackground()
        
        // TAB BAR BACKGROUND COLOR HERE. (same as above)
        appearance.backgroundColor = UIColor.white
        UITabBar.appearance().standardAppearance = appearance
        UITabBar.appearance().scrollEdgeAppearance = UITabBar.appearance().standardAppearance
    }
    
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: RootView())
        self.window = window
        window.makeKeyAndVisible()
    }
}
 

Комментарии:

1. Ключом для меня было появление прокрутки. Он должен быть установлен в iOS15. Отличная находка, спасибо, что поделились!