选项卡视图选项卡项的选定选项卡图像在SwiftUI中始终为蓝色

选项卡视图选项卡项的选定选项卡图像在SwiftUI中始终为蓝色,swift,swiftui,ios13,Swift,Swiftui,Ios13,我在SwiftUI中使用一个选项卡视图,可以设置当前未选中的选项卡的图像,但是,为选中的选项卡设置图像似乎不起作用。我看到的是一个蓝色的圆圈,而不是黑色的 这是我的密码: import SwiftUI struct MainView: View { @State private var selected = 0 var body: some View { TabView(selection: $selected){ Text("Fir

我在SwiftUI中使用一个选项卡视图,可以设置当前未选中的选项卡的图像,但是,为选中的选项卡设置图像似乎不起作用。我看到的是一个蓝色的圆圈,而不是黑色的

这是我的密码:

import SwiftUI

struct MainView: View {
    @State private var selected = 0

    var body: some View {

        TabView(selection: $selected){
            Text("First View")
                .tabItem {
                    Image(self.selected == 0 ? "eclipse-tab-icon-black" : "eclipse-tab-icon-grey")
                        .renderingMode(.original)
            }.tag(0)
            Text("Second View")
                .tabItem {
                    Image(systemName: "2.circle")
            }.tag(1)
            Text("Third View")
                .tabItem {
                    Image(systemName: "3.circle")
            }.tag(1)
        }
    }
}

struct MainView_Previews: PreviewProvider {
    static var previews: some View {
        MainView()
    }
}
正如您在这里看到的,未选择的选项卡是灰色的。这是正确的:

但所选选项卡为蓝色,而不是黑色:

资产:

资产设置:


将图像的渲染模式更改为“原始”。在xcassets文件夹上,或使用代码中的renderingMode修改器。

将图像的渲染模式更改为原始模式。无论是在xcassets文件夹上,还是在代码中使用renderingMode修改器。

您没有在选项卡视图上设置“选定”和“未选定”图标,您只提供一个图像,并且在未选定时以次颜色渲染,在选定时以强调色渲染。
如果您希望所选选项卡图标为黑色,您可以将TabView上的重点颜色设置为黑色,但这违反了Apple的设计准则,您还将更改所有子视图的重点颜色。

您没有在TabView上设置“已选”和“未选”图标,您只提供一个图像,未选中时以副色渲染,选中时以强调色渲染。 如果您希望所选选项卡图标为黑色,您可以将TabView上的重点颜色设置为黑色,但这违反了苹果的设计准则,您还将更改所有子视图的重点颜色。

使用.accentColor.black

import SwiftUI

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            Text("First View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("first")
                        Text("First")
                    }
                }
                .tag(0)
            Text("Second View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("second")
                        Text("Second")
                    }
                }
                .tag(1)
        }.accentColor(.black)
    }
}
使用.accentColor.black

import SwiftUI

struct ContentView: View {
    @State private var selection = 0

    var body: some View {
        TabView(selection: $selection){
            Text("First View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("first")
                        Text("First")
                    }
                }
                .tag(0)
            Text("Second View")
                .font(.title)
                .tabItem {
                    VStack {
                        Image("second")
                        Text("Second")
                    }
                }
                .tag(1)
        }.accentColor(.black)
    }
}

使用选项卡视图的颜色

TabView(selection: $selected) {
        SwiftUIMyData()
            .tabItem {
                Image(systemName: "rectangle.fill.on.rectangle.fill")
                Text("My Data")
        }
        .tag(0)
        SwiftUIMyContent()
            .tabItem {
                Image(systemName: "desktopcomputer")
                Text("My Content")
        }
        .tag(1)
        }.accentColor(.black)

使用选项卡视图的颜色

TabView(selection: $selected) {
        SwiftUIMyData()
            .tabItem {
                Image(systemName: "rectangle.fill.on.rectangle.fill")
                Text("My Data")
        }
        .tag(0)
        SwiftUIMyContent()
            .tabItem {
                Image(systemName: "desktopcomputer")
                Text("My Content")
        }
        .tag(1)
        }.accentColor(.black)

如果要为选项卡视图提供自己的PNG图像,请使用渲染模式模板,以便将默认颜色应用于图像的非背景位

如果在“资产”文件夹中发现此操作最简单。或者,您可以将其编码为:

Image("myImage").renderingMode(.template)

如果要为选项卡视图提供自己的PNG图像,请使用渲染模式模板,以便将默认颜色应用于图像的非背景位

如果在“资产”文件夹中发现此操作最简单。或者,您可以将其编码为:

Image("myImage").renderingMode(.template)

我本来会这么做的,但我的情况有点不同。我的两个图标相同,例如未选择时为灰色,选择时为黑色,而其中一个图标在选择时有两种不同的颜色,未选择时为灰色。我目前正在自定义生成一个选项卡,因为我找不到解决方案@Lulugain说构建一个定制的是唯一的解决方案。我最终构建了一个定制的,这花了我几分钟的时间。我真的很惊讶这是多么容易。我本来会这么做的,但我的情况有点不同。我的两个图标相同,例如未选择时为灰色,选择时为黑色,而其中一个图标在选择时有两种不同的颜色,未选择时为灰色。我目前正在自定义生成一个选项卡,因为我找不到解决方案@Lulugain说构建一个定制的是唯一的解决方案。我最终构建了一个定制的,这花了我几分钟的时间。我真的很惊讶这是多么容易。