在 SwiftUI 的 TabView 中显示选定的选项卡
Show selected tab in TabView in SwiftUI
在SwiftUI中使用TabView时,如何才能像下图那样显示选中的Tab?
我试过在每个选项卡中创建一个 VStack,如下所示:
struct ContentView: View {
@State public var tabViewSelection = 0
var body: some View {
TabView(selection: $tabViewSelection) {
HomeFirstLevel()
.tabItem {
VStack {
Image("HomeIcon")
Rectangle()
.frame(height: 7)
.foregroundColor((tabViewSelection == 0) ? .black : .clear)
}
}.tag(0)
}
}
}
但它不起作用。
我什至无法添加矩形而不是图像:
HomeFirstLevel()
.tabItem {
Rectangle()
}.tag(0)
TabView 不接受形状吗?
在此先感谢您的帮助!
您不能在 tabItem 中设置形状。但是您可以使用 ZStack
在标签栏上添加形状并设置 x 位置。
这是演示。
struct ContentViewTabDemo: View {
@State public var tabViewSelection = 0
private var singleTabWidth = UIScreen.main.bounds.width / 5
var body: some View {
ZStack(alignment: .bottomLeading) {
TabView(selection: $tabViewSelection) {
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(0)
Color.blue
.tabItem {
VStack {
Image(systemName: "heart.fill")
}
}.tag(1)
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(2)
Color.blue
.tabItem {
VStack {
Image(systemName: "heart.fill")
}
}.tag(3)
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(4)
}
Rectangle()
.offset(x: singleTabWidth * CGFloat(tabViewSelection))
.frame(width: singleTabWidth, height: 7)
.padding(.bottom, 2)
.animation(.default)
}
}
}
在SwiftUI中使用TabView时,如何才能像下图那样显示选中的Tab?
我试过在每个选项卡中创建一个 VStack,如下所示:
struct ContentView: View {
@State public var tabViewSelection = 0
var body: some View {
TabView(selection: $tabViewSelection) {
HomeFirstLevel()
.tabItem {
VStack {
Image("HomeIcon")
Rectangle()
.frame(height: 7)
.foregroundColor((tabViewSelection == 0) ? .black : .clear)
}
}.tag(0)
}
}
}
但它不起作用。 我什至无法添加矩形而不是图像:
HomeFirstLevel()
.tabItem {
Rectangle()
}.tag(0)
TabView 不接受形状吗? 在此先感谢您的帮助!
您不能在 tabItem 中设置形状。但是您可以使用 ZStack
在标签栏上添加形状并设置 x 位置。
这是演示。
struct ContentViewTabDemo: View {
@State public var tabViewSelection = 0
private var singleTabWidth = UIScreen.main.bounds.width / 5
var body: some View {
ZStack(alignment: .bottomLeading) {
TabView(selection: $tabViewSelection) {
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(0)
Color.blue
.tabItem {
VStack {
Image(systemName: "heart.fill")
}
}.tag(1)
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(2)
Color.blue
.tabItem {
VStack {
Image(systemName: "heart.fill")
}
}.tag(3)
Color.red
.tabItem {
VStack {
Image(systemName: "circle.fill")
}
}.tag(4)
}
Rectangle()
.offset(x: singleTabWidth * CGFloat(tabViewSelection))
.frame(width: singleTabWidth, height: 7)
.padding(.bottom, 2)
.animation(.default)
}
}
}