如何使用SwiftUI TabView more tab停止使用选定的tab变量显示

如何使用SwiftUI TabView more tab停止使用选定的tab变量显示,swiftui,Swiftui,我有一个超过5个选项卡的选项卡视图,在SwiftUI中,它会自动创建一个更多选项卡来显示额外的选项卡。这一直运作良好。 但是,我想设置用户在应用程序打开时看到的第一个选项卡,因此我添加了一个EnvironmentObject来存储所选选项卡。这允许我设置用户看到的第一个选项卡,并通过编程更改选项卡。例如,在其中一个选项卡上,用户上载的图像需要一段时间才能处理,因此在上载图像时,该功能会更改所选选项卡,然后更改用户视图 这一切都很好,但是“更多”选项卡现在不再工作,它尝试显示更多页面,但随后返回到

我有一个超过5个选项卡的选项卡视图,在SwiftUI中,它会自动创建一个更多选项卡来显示额外的选项卡。这一直运作良好。 但是,我想设置用户在应用程序打开时看到的第一个选项卡,因此我添加了一个EnvironmentObject来存储所选选项卡。这允许我设置用户看到的第一个选项卡,并通过编程更改选项卡。例如,在其中一个选项卡上,用户上载的图像需要一段时间才能处理,因此在上载图像时,该功能会更改所选选项卡,然后更改用户视图

这一切都很好,但是“更多”选项卡现在不再工作,它尝试显示更多页面,但随后返回到EnvironmentObject中的选项卡选择

我怎样才能阻止这种行为

我的选项卡视图:


结构基本视图:视图{
@环境对象变量screenCoordinator:screenCoordinator
@状态变量爬升:爬升列表数据?
@状态变量选择=2
var body:一些观点{
选项卡视图(选择:$screenCoordinator.selection){
导航视图{
VStack{
文本(“搜索”)
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
图像(系统名称:“放大镜”)
文本(“搜索”)
}.tag(0)
导航视图{
VStack{
地图视图()
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
图像(系统名称:“map.fill”)
文本(“地图”)
}.标签(1)
导航视图{
VStack{
爬山名单()
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
ScalledImage(名称:“攀登者”,尺寸:CGSize(宽:24,高:24))
文本(“爬升”)
}.标签(2)
导航视图{
VStack{
AddAClimb()
}
}.tabItem{
图像(系统名称:“plus”)
文本(“添加爬升”)
}.标签(6)
导航视图{
VStack{
文本(“日志”)
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
图像(系统名称:“book.fill”)
文本(“日志”)
}.标签(3)
导航视图{
VStack{
文本(“简介”)
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
图像(系统名称:“person.circle”)
文本(“简介”)
}.标签(4)
导航视图{
VStack{
文本(“设置”)
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
图像(系统名称:“齿轮”)
文本(“设置”)
}.标签(5)
导航视图{
VStack{
文本(“统计数据”)
}.navigationBarTitle(“攀登者日志”,显示模式:。内联)
}.tabItem{
ScalledImage(名称:“stats”,大小:CGSize(宽度:24,高度:24))
文本(“统计数据”)
}.标签(7)
}.EdgeSigningSafeArea(.top).navigationTitle(“”)。navigationBarHidden(true)
}
} 
我的环境对象:


类屏幕协调器:ObserveObject{
@已发布变量选择=2
}

这看起来像是
TabView+ObservedObject
的一个bug

这里有一个可能的解决方法-使用内部状态并将其和环境对象的值同步。使用Xcode 12/iOS 14进行测试

struct BasicView: View {
        @EnvironmentObject var screenCoordinator: ScreenCoordinator
        @State var climbs:ClimbListData?

        @State private var selection = 0    // << use state !!

        var body: some View {
            TabView(selection: $selection) {    // << local selection

               // ... your tabs here
                     
             }.edgesIgnoringSafeArea(.top)
             .navigationTitle("").navigationBarHidden(true)
             .onAppear {
                // initially loaded
                self.selection = self.screenCoordinator.selection
            }
            .onChange(of: selection) {
                // store local to environment
                self.screenCoordinator.selection = $0
            }
            .onReceive(screenCoordinator.$selection) {
                // update state on env changed
                self.selection = $0
            }
        }

    }
struct基本视图:视图{
@环境对象变量screenCoordinator:screenCoordinator
@状态变量爬升:爬升列表数据?

@State private var selection=0//这可以让“更多”选项卡正常工作,但是当我更改函数中的Environment对象时,tabview不会更改。