【发布时间】:2020-11-06 02:22:59
【问题描述】:
如何制作一个 SwiftUI TabView,其标题对齐到顶部而不是底部。
谢谢
【问题讨论】:
-
创建自定义标签视图。
-
请指导我,谢谢
如何制作一个 SwiftUI TabView,其标题对齐到顶部而不是底部。
谢谢
【问题讨论】:
SwiftUI不直接支持,但您可以制作自己的自定义视图,这里有一个简单的示例说明如何做到这一点:
struct ContentView: View {
@State var selectedTab = Tabs.FirstTab
var body: some View {
VStack {
HStack {
Spacer()
VStack {
Image(systemName: "airplane")
.foregroundColor(selectedTab == .FirstTab ? Color.red : Color.black)
Text("First tab")
}
.onTapGesture {
self.selectedTab = .FirstTab
}
Spacer()
VStack {
Image(systemName: "person.fill")
.foregroundColor(selectedTab == .SecondTab ? Color.red : Color.black)
Text("Second tab")
}
.onTapGesture {
self.selectedTab = .SecondTab
}
Spacer()
VStack {
Image(systemName: "cart.fill")
.foregroundColor(selectedTab == .ThirdTab ? Color.red : Color.black)
Text("Third tab")
}
.onTapGesture {
self.selectedTab = .ThirdTab
}
Spacer()
}
.padding(.bottom)
.background(Color.green.edgesIgnoringSafeArea(.all))
Spacer()
if selectedTab == .FirstTab {
FirstTabView()
} else if selectedTab == .SecondTab {
SecondTabView()
} else {
ThirdTabView()
}
}
}
}
struct FirstTabView : View {
var body : some View {
VStack {
Text("FIRST TAB VIEW")
}
}
}
struct SecondTabView : View {
var body : some View {
Text("SECOND TAB VIEW")
}
}
struct ThirdTabView : View {
var body : some View {
Text("THIRD TAB VIEW")
}
}
enum Tabs {
case FirstTab
case SecondTab
case ThirdTab
}
注意:为了简单起见,我没有花太多精力来完美对齐标签并使用 Spacers(因为这与问题无关)。我还放了所有代码,以便您可以创建新的空项目并复制粘贴它以尝试了解它是如何工作的。
让我们来看看吧:
【讨论】: