У меня была похожая проблема, и я решил ее, создав оболочку вида, похожую на ту, что делается в SwiftUI.
Это просто добавление СУХОСТИ к ответу vacawama :
struct NavigationTab<Title, Content>: View where Title: StringProtocol, Content: View {
var title: Title
var content: () -> Content
var body: some View {
NavigationView {
content()
.navigationBarTitle(Text(title))
}
.tabItemLabel(Text(title))
}
}
Я пропустил тег, потому что для меня более логично иметь те, которые определены в родительском представлении. Вы можете использовать это так:
struct SomeTabbedView: View {
@State private var selection = 0
var body: some View {
TabbedView(selection: $selection) {
NavigationTab(title: "First") {
ContentView()
}
.tag(0)
NavigationTab(title: "Second") {
OtherView()
}
.tag(1)
}
}
}
Это, очевидно, усложняется, если вы хотите, чтобы дополнительные детали, такие как изображение над ярлыком вкладки, поскольку .navigationBarTitle()
требует экземпляр Text.