Если сделать 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_Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид_swift1.2

Изменение прозрачности и цвета панели вкладок 9X_Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид_ios

Вы можете 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)
    }
}

13
1

  • При осмотре серая область — это не дополнительный вид, а фактически ф ...
4
Общее количество ответов: 4

Ответ #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)

9X_Если сделать TabView непрозрачным в SwiftUI, сверху появится новый вид_swift1.2

15
0

Ответ #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
    }
}

7
0

Ответ #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
}

2
0

Ответ #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(:).

2
0