【发布时间】:2020-09-03 05:39:54
【问题描述】:
我的主视图中有一个底部导航视图,我想通过在 ViewModel 中定义的 @published 变量将其隐藏在一些内部视图中,但是当我更改变量的值时,所有正文都会刷新主视图并导致一些问题(丢失数据)。我只想刷新底部导航的状态,而不是整个身体。这是我的代码:
主视图
struct MainView: View {
@ObservedObject var viewModel = MainViewModel()
var body: some View {
ZStack {
VStack{
content
}
VStack {
Spacer()
BottomNavigationView(mainViewModel: self.viewModel)
.padding(.horizontal)
}.opacity(viewModel.isBottomNavigationVisible ? 1 : 0)
}
}
var content: some View {
switch self.viewModel.currentView {
case .plan:
return PlanMainView(mainViewModel: viewModel).eraseToAnyView()
case .me:
return MeMainView(mainViewModel: viewModel).eraseToAnyView()
case .onBoarding:
return OnBoardingHome(mainViewModel: viewModel).eraseToAnyView()
}}
MainViewModel
class MainViewModel: ObservableObject {
@Published private(set) var currentView: Modules = .main
@Published var isBottomNavigationVisible: Bool = true
func hideBottomBar() {
self.isBottomNavigationVisible = false
}
func showBottomBar() {
self.isBottomNavigationVisible = true
}
func GoToView(view: Modules) {
self.currentView = view
}}
MeMainView
这是我想在 onAppear 中隐藏底部导航的视图
struct MeMainView: View {
@ObservedObject var mainViewModel:MainViewModel
var body: some View {
ZStack {
Text("MewView")
}.onAppear{
self.mainViewModel.hideBottomBar()
}
}}
【问题讨论】:
标签: swift xcode swiftui combine