我终于能够NavigationView
根据TabbedView
using 中的当前选项卡弄清楚如何更改我的标题onAppear()
,但我很确定这不是解决问题的方法:
struct SomeTabbedView : View {
@State private var selection = 0
@State private var title = "First"
var body: some View {
NavigationView {
TabbedView(selection: $selection) {
ContentView()
.tabItemLabel(
Text("First")
).tag(0).onAppear{
self.title = "First"
}
OtherView()
.tabItemLabel(
Text("Second")
).tag(1).onAppear{
self.title = "Second"
}
}.navigationBarTitle(Text(title))
}
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,这严重违反了 DRY 原则。如果我们决定更改第一个视图,例如字符串“First”,则当前的实现将需要在三个不同的地方重复该操作。
我想初始化一个字典数组并遍历View: Label
对,但我不仅不确定这是正确的方法,而且我不确定如何继续实现它。也可以只拥有一个带有标签的数组,但是如果我们想要更改视图的顺序,这会产生另一个违规行为。
您的顶级视图应该是TabbedView
,并且每个选项卡都应该有自己的NavigationView
。这并没有解决“First”同时用于 the.navigationBarTitle
和 the 的.tabItemLabel
事实,但实际上它们是两个不同的东西,可以不同。
struct SomeTabbedView : View {
@State private var selection = 0
var body: some View {
TabbedView(selection: $selection) {
NavigationView {
ContentView()
.navigationBarTitle(Text("First"))
}
.tabItemLabel(Text("First"))
.tag(0)
NavigationView {
OtherView()
.navigationBarTitle(Text("Second"))
}
.tabItemLabel(Text("Second"))
.tag(1)
}.edgesIgnoringSafeArea(.top)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1934 次 |
最近记录: |