首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI Nested navigationBar消失

SwiftUI Nested navigationBar消失
EN

Stack Overflow用户
提问于 2019-10-11 03:48:30
回答 3查看 2.1K关注 0票数 2

我有三个视图,它们是列表。结构视图:MainMenuView{ @EnvironmentObject对象var dataModel: DM

代码语言:javascript
复制
var body: some View {

    return NavigationView{
        List {
            Matchup()
            GameSettings()
            EnteringGame()
        }
    }
}

Inside Matchup()

代码语言:javascript
复制
struct Matchup: View {
@EnvironmentObject var dataModel: DM    

var body: some View {
    Section(header: Text("MATCH-UP")
        .fontWeight(.heavy)
        .foregroundColor(Color("TPLightGrey"))
    ) {
        NavigationLink(destination: TrendSingleSelect(
            title: .constant("TEAM"),
            col: .constant(self.dataModel.queryColumnTeam1),
            items: .constant(self.dataModel.team1Values) ,
            selection: self.$dataModel.team1ListValue
        )) {
            HStack {
                Text("TEAM")
                Spacer()
                if dataModel.team1ListValue.count == 0 {
                    Text("IS ANY").foregroundColor(Color("TPLightGrey"))
                } else {
                    Text( self.dataModel.team1ListValue.joined(separator: ", ")).foregroundColor(Color("TPOrange"))
                }
            }
        }


    }
    .listRowBackground(Color("TPDarkGrey"))
    .font(.system(size: 14))
    .navigationBarTitle("", displayMode: .inline)
    .navigationBarHidden(true)
}

}

请注意,我隐藏了theNavBar。当用户按tabs键时,我想推入一个导航。:这是最终视图:

代码语言:javascript
复制
var body: some View {

    return VStack  {

        List {
            ForEach(self.items, id: \.self) { item in
                SingleSelectionRow(title: item, isSelected: self.selection.contains(item)) {

                    if self.selection.contains(item) {
                        self.selection = []
                    }
                    else {
                        self.selection = [item]

                    }
                    self.queryCallback()
                }
                .listRowBackground(Color("TPDarkGrey"))
            }//ForEach
        }//list
            .font(.system(size: 14))
    }

    .navigationBarHidden(false)
    .navigationBarTitle(title)
    .navigationBarItems(trailing:
        Button(action: {
               // Actions
                self.reset()
           }, label: {
            Text("Clear")
            }
        )
    )

}

发生的情况是:当我点击sell时,我会按下该部分。然而,当它推入时,我看到了navBar,然后它就崩溃了。但是,当我点击视图中的任何内容来触发视图重新加载时,它就会显示出来。

导航栏崩溃的原因是什么?

EN

回答 3

Stack Overflow用户

发布于 2019-12-17 07:09:42

在MatchupView中尝试以下代码:

代码语言:javascript
复制
struct Matchup: View {
@EnvironmentObject var dataModel: DM    

var body: some View {
NavigationView {            // attention hear************
    Section(header: Text("MATCH-UP")
        .fontWeight(.heavy)
        .foregroundColor(Color("TPLightGrey"))
    ) {
        NavigationLink(destination: TrendSingleSelect(
            title: .constant("TEAM"),
            col: .constant(self.dataModel.queryColumnTeam1),
            items: .constant(self.dataModel.team1Values) ,
            selection: self.$dataModel.team1ListValue
        )) {
            HStack {
                Text("TEAM")
                Spacer()
                if dataModel.team1ListValue.count == 0 {
                    Text("IS ANY").foregroundColor(Color("TPLightGrey"))
                } else {
                    Text( self.dataModel.team1ListValue.joined(separator: ", ")).foregroundColor(Color("TPOrange"))
                }
            }
        }


    }
    .listRowBackground(Color("TPDarkGrey"))
    .font(.system(size: 14))
}                // attention hear************
    .navigationBarTitle("", displayMode: .inline)
    .navigationBarHidden(true)
}
票数 0
EN

Stack Overflow用户

发布于 2021-04-10 02:14:23

我无法编译您的项目,因此我假设以下解决方案:

您可以将navigationBarHidden绑定到变量,以便在特定条件下更改该值。像这样:.navigationBarHidden($onOff)

代码语言:javascript
复制
struct ContentView: View {
    @State var onOff = false
    
    var body: some View {
        
        NavigationView {
            Button("Button") {
                self.onOff.toggle()
            }
            .navigationBarTitle(Text("Events"), displayMode: .inline)
            .navigationBarHidden($onOff.wrappedValue)
        }
        // that means only show one view at a time no matter what device I'm working
        .navigationViewStyle(StackNavigationViewStyle())
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-10-11 04:40:08

啊..。这是不必要的: MatchupView中的.navigationBarHidden(true)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58330150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档