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