#ios #swift #swiftui #uitabbarcontroller #ios15
Вопрос:
У меня есть приложение SwiftUI с панелью вкладок. Если я открою подробное дочернее представление в навигационном представлении, а затем нажму «Назад», панель вкладок станет прозрачной, показывая элементы в ленте под значками на панели вкладок.
- В ГЛАВНОЙ ЛЕНТЕ ОТКРОЙТЕ ДЕТАЛЬНОЕ ПРЕДСТАВЛЕНИЕ НАВИГАЦИИ ДЛЯ ДЕТЕЙ. —————
- ЗАТЕМ, ОКАЗАВШИСЬ ВНУТРИ ПОДРОБНОГО ПРЕДСТАВЛЕНИЯ, НАЖМИТЕ КНОПКУ НАЗАД. —————
- ВЫ УВИДИТЕ ЭТУ ОШИБКУ. ПАНЕЛЬ ВКЛАДОК БУДЕТ ПРОЗРАЧНОЙ. —————
Ответ №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. Отличная находка, спасибо, что поделились!