Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид
Всем привет. Я создаю простое приложение 9X_ios SwiftUI, и мне бы хотелось, чтобы TabView 9X_uitabbar моего приложения имел настраиваемый фон 9X_swift1.2 и не был полупрозрачным.
Для этого я использую 9X_swiftui UITabBar.appearance().backgroundColor = Color
и UITabBar.appearance().isTranslucent = false
, которые должны делать именно это, и 9X_swift-language да, он делает полосу непрозрачной, но вместо 9X_swiftui-bug того, чтобы присвоить полосе выбранный мной 9X_swift-ios цвет, она создает новое представление в 9X_swift-ios верхней части панели вкладок, которой не 9X_uitabbar должно быть и явно не было раньше.
Без изменения прозрачности и цвета панели вкладок
Изменение прозрачности и цвета панели вкладок
Вы можете 9X_swift1.2 заметить появившееся новое представление. Я 9X_apple-ios предполагаю, что это проблема с isTranslucent
, потому 9X_apple-ios что, когда я удаляю его, новое представление 9X_swift исчезает.
Есть ли способ изменить цвет и 9X_iphone-os сделать полосу непрозрачной и не отображать 9X_swift-language такой вид?
Любая помощь приветствуется. Заранее 9X_uitabview спасибо.
Мой код
SceneDelegate (только часть с изменяющимся цветом)
UITabBar.appearance().isTranslucent = false UITabBar.appearance().backgroundColor = UIColor(named: "backgroundColor")
TabView
struct TabController: View { @State private var selection = 0 var body: some View { TabView(selection: $selection) { HomePageView() .tabItem { Image(systemName: "house.fill") .font(.title) } .tag(0) Text("Second View") .font(.title) .tabItem { Image(systemName: "bell.fill") .font(.title) } .tag(1) } .edgesIgnoringSafeArea(.top) } }
- При осмотре серая область — это не дополнительный вид, а фактически ф ...
Ответ #1
Ответ на вопрос: Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид
С помощью этого кода можно установить цвет 9X_swift-ios панели вкладок. Напишите этот код в SceneDelegate
UITabBar.appearance().shadowImage = UIImage() UITabBar.appearance().backgroundImage = UIImage() UITabBar.appearance().isTranslucent = true UITabBar.appearance().backgroundColor = .black
В TabBar 9X_ios-sdk Background вы можете установить любой другой 9X_uitabbar цвет вместо черного. Он работает отлично.
ContentView:
TabView(selection: $selection) { Text("1st View") .tabItem { Image(systemName: "house.fill") .font(.title) } .tag(0) Text("Second View") .font(.title) .tabItem { Image(systemName: "bell.fill") .font(.title) } .tag(1) } .edgesIgnoringSafeArea(.top)
Ответ #2
Ответ на вопрос: Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид
Это правильный способ сделать это.
Он также 9X_swift работает со SwiftUI, поскольку TabView и 9X_uitabbar NavigationView на самом деле являются UIHostedController 9X_swift-language для устаревших UITabBarController и UINavigationController.
Изменить: только 9X_swiftui-bug что посмотрел "Модернизация пользовательского 9X_swiftui-bug интерфейса для iOS 13" Вот как это 9X_iphone-os сделать:
let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.titleTextAttributes = [.foregroundColor: UIColor.white] appearance.largeTitleTextAttributes = [.foregroundColor: UIColor .white]
Затем настройте внешний вид на различные 9X_swift1.2 типы внешнего вида.
navigationBar.standardAppearance = appearance navigationBar.compactAppearance = appearance navigationBar.scrollEdgeAppearance = appearance
Ссылка: https://developer.apple.com/videos/play/wwdc2019/224/
2-е изменение: нужно найти 9X_apple-ios чистый способ доступа к UINavigationController 9X_iphone-os из представления SwiftUI.
А пока это поможет:
extension UINavigationController { override open func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() navigationBar.standardAppearance = appearance navigationBar.compactAppearance = appearance navigationBar.scrollEdgeAppearance = appearance } } extension UITabBarController { override open func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let appearance = UITabBarAppearance() appearance.configureWithOpaqueBackground() tabBar.standardAppearance = appearance } }
Ответ #3
Ответ на вопрос: Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид
Вы можете получить доступ к UINavigationController 9X_swift-language или UITabbarController, чтобы использовать 9X_swiftui [https://github.com/siteline/SwiftUI-Introspect]
и 9X_swiftui напишите так
NavigationVIew {...} .introspectNavigationController { (navController) in let coloredAppearance = UINavigationBarAppearance() coloredAppearance.configureWithOpaqueBackground() coloredAppearance.backgroundColor = backgroundColor coloredAppearance.backgroundImage?.withTintColor(backgroundColor) coloredAppearance.titleTextAttributes = [.foregroundColor: tintColor] coloredAppearance.largeTitleTextAttributes = [.foregroundColor: tintColor] coloredAppearance.shadowColor = shadowColor navController.navigationBar.compactAppearance = coloredAppearance navController.navigationBar.standardAppearance = coloredAppearance navController.navigationBar.scrollEdgeAppearance = coloredAppearance navController.navigationBar.tintColor = tintColor }
Ответ #4
Ответ на вопрос: Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид
Вы можете использовать такое расширение:
extension UITabBarController { override open func viewDidLoad() { super.viewDidLoad() let appearance = UITabBarAppearance() appearance.backgroundColor = .black tabBar.standardAppearance = appearance } }
Обратите 9X_uitabbar внимание, что замещаемая функция должна 9X_uitabview быть viewDidLoad()
. По крайней мере, у меня это не работает, когда 9X_swiftui это функция viewDidAppear(:)
.
-
3
-
8
-
22
-
2
-
7
-
3
-
6
-
13
-
5
-
3
-
6
-
5
-
2
-
15
-
8
-
4
-
6
-
4
-
12
-
12
-
11
-
5
-
12
-
5
-
5
-
1
-
7
-
13
-
5
-
21
-
4
-
15
-
4
-
8
-
5
-
8
-
5
-
5
-
7
-
11
-
10
-
13
-
16
-
12
-
8
-
2
-
5
-
2
-
3
-
15