SwiftUI:如何在 TabView 中将图像更新为填充/轮廓
SwiftUI: How to update image to filled / outlined in TabView
我试图在选择时使用填充图像,在取消选择时尝试使用轮廓图像。我尝试渲染图像但仍然填充
所以我认为这行得通,但行不通:
struct ListTabView: View {
@State private var selectedTab = 0
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
Text("Tab 1")
.onTapGesture {
self.selectedTab += 1
}
.tabItem {
selectedTab == 0 ? Image(systemName: "star.fill") : Image(systemName: "star")
Text("First")
}
.tag(0)
Text("Tab 2")
.onTapGesture {
self.selectedTab -= 1
}
.tabItem {
selectedTab == 1 ? Image(systemName: "moon.stars.fill") : Image(systemName: "moon.stars")
Text("Second")
}
.tag(1)
}
.accentColor(.pink)
.onAppear {
UITabBar.appearance().barTintColor = .white
}
}
}
}
struct ListTabView_Previews: PreviewProvider {
static var previews: some View {
ListTabView()
}
}
您的代码确实有效。这个问题是我能找到的其他没有记录的问题。如果您使用 SF 字体的非 .fill
变体,.fill
变体将被替换。使用以下代码对其进行测试:
TabView(selection: $selectedTab) {
VStack {
Text("Tab 1")
Text(Image(systemName: "star"))
}
.tabItem {
selectedTab == 0 ? Image(systemName: "star") : Image(systemName: "sun.max")
Text("First")
}
.tag(0)
VStack {
Text("Tab 2")
Text(Image(systemName: "moon.stars"))
}
.tabItem {
selectedTab == 1 ? Image(systemName: "moon.stars") : Image(systemName: "sun.max")
Text("Second")
}
.tag(1)
}
您会注意到我使用了普通变体,但使用了填充变体。此外,您不需要 .onTap()
,但我怀疑您在图像似乎没有切换时添加了它。
您可以将其添加到图像/标签:
Image(systemName: selectedTab == 0 ? "star.fill" : "star")
.environment(\.symbolVariants, selectedTabItemIndex == 0 ? .fill : .none)
它将允许您按预期设置符号变体。
我试图在选择时使用填充图像,在取消选择时尝试使用轮廓图像。我尝试渲染图像但仍然填充
所以我认为这行得通,但行不通:
struct ListTabView: View {
@State private var selectedTab = 0
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
Text("Tab 1")
.onTapGesture {
self.selectedTab += 1
}
.tabItem {
selectedTab == 0 ? Image(systemName: "star.fill") : Image(systemName: "star")
Text("First")
}
.tag(0)
Text("Tab 2")
.onTapGesture {
self.selectedTab -= 1
}
.tabItem {
selectedTab == 1 ? Image(systemName: "moon.stars.fill") : Image(systemName: "moon.stars")
Text("Second")
}
.tag(1)
}
.accentColor(.pink)
.onAppear {
UITabBar.appearance().barTintColor = .white
}
}
}
}
struct ListTabView_Previews: PreviewProvider {
static var previews: some View {
ListTabView()
}
}
您的代码确实有效。这个问题是我能找到的其他没有记录的问题。如果您使用 SF 字体的非 .fill
变体,.fill
变体将被替换。使用以下代码对其进行测试:
TabView(selection: $selectedTab) {
VStack {
Text("Tab 1")
Text(Image(systemName: "star"))
}
.tabItem {
selectedTab == 0 ? Image(systemName: "star") : Image(systemName: "sun.max")
Text("First")
}
.tag(0)
VStack {
Text("Tab 2")
Text(Image(systemName: "moon.stars"))
}
.tabItem {
selectedTab == 1 ? Image(systemName: "moon.stars") : Image(systemName: "sun.max")
Text("Second")
}
.tag(1)
}
您会注意到我使用了普通变体,但使用了填充变体。此外,您不需要 .onTap()
,但我怀疑您在图像似乎没有切换时添加了它。
您可以将其添加到图像/标签:
Image(systemName: selectedTab == 0 ? "star.fill" : "star")
.environment(\.symbolVariants, selectedTabItemIndex == 0 ? .fill : .none)
它将允许您按预期设置符号变体。