我正在尝试查看是否可以根据选择的选项卡项来更改底部选项卡视图的颜色。目前,我可以使用init中的以下代码来使tabview栏清晰可见。

let tabBar = UITabBar.appearance()
    init() {
        tabBar.barTintColor = UIColor.clear
        tabBar.backgroundImage = UIImage()
        tabBar.shadowImage = UIImage()
    }
 ...
 TabView(selection: $selectedTab) {
                FirstView()
                    .tabItem{
                        Text("First")
                    }
                SecondView()
                    .tabItem{
                        Text("Second")
                    }
    }
    .onAppear{
setTabViewBackground()
}

func setTabViewBackground() {
        if selectedTab != 0 {
            tabBar.barTintColor = UIColor.blue
        }
    }
尝试在主体重绘时触发功能,如果这种声明式的样式对我最有利,但完全不改变tabview的背景,则idk。

最佳答案

任何.appearance都会影响外观本身之后创建的实例。因此解决方案是在外观配置更改后重新创建TabView
这是方法的演示。已通过Xcode 12 / iOS 14测试。
ios - 根据选择的选项卡更改Tabview颜色-Swiftui-LMLPHP

struct DemoView: View {

    let tabBar = UITabBar.appearance()

    init() {
        tabBar.barTintColor = UIColor.red
    }

    @State private var selectedTab = 0    // preserves selected tab

    var body: some View {
        TabView(selection: $selectedTab) {
            Text("FirstView")
                .tabItem{
                    Text("First")
                }.tag(0)
            Text("SecondView")
                .tabItem{
                    Text("Second")
                }.tag(1)
        }
        .onAppear {
            setTabViewBackground()  // called, because `id` is below
        }
        .id(selectedTab)   // recreates entire above view with new tabbar
    }

    func setTabViewBackground() {
        tabBar.barTintColor = selectedTab != 0 ? .blue : .red
    }
}

关于ios - 根据选择的选项卡更改Tabview颜色-Swiftui,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63404238/

10-13 01:10