SwiftUI导航栏标题和项目在向后滑动失败时不会消失

10

enter image description here

问题在于导航栏的标题和项目没有消失,这是一种意外的行为。
struct DestinationView: View {

@State private var showingActionSheet = false

var body: some View {
    Text("DestinationView")
        .padding(.top, 100)
        .navigationBarTitle(Text("Destination"), displayMode: .inline)
        .navigationBarItems(trailing: Button(action: {
            print("tapped")
        }, label: {
            Text("second")
        }))
        .actionSheet(isPresented: self.$showingActionSheet) { () -> ActionSheet in
            ActionSheet(title: Text("Settings"), message: nil, buttons: [
                .default(Text("Delete"), action: {
                }),
                .cancel()
            ])
        }

}

}

我有同样的问题。这真的很烦人。你修复了吗? - eberhapa
4
我刚才发现,只有在详细页面上有BarButtonItems时,这个问题才会存在。 - eberhapa
到目前为止有没有好的解决方案?我遇到了完全相同的问题。但对我来说,只有在我以编程方式解除视图时才会出现。 - Sebastian Boldt
2个回答

1
问题在于.navigationBarTitle()、.navigationBarItems()修饰符和.actionSheet()修饰符在代码中彼此相邻。(但也可能是.alert()或.overlay()修饰符代替.actionSheet())
解决方案如下:
struct DestinationView: View {

@State private var showingActionSheet = false

var body: some View {

    List {
        Text("DestinationView")
            .padding(.top, 100)
            .navigationBarTitle(Text("Destination"), displayMode: .inline)
            .navigationBarItems(trailing: Button(action: {
                print("tapped")
            }, label: {
                Text("second")
            }))
    }
    .actionSheet(isPresented: self.$showingActionSheet) { () -> ActionSheet in
        ActionSheet(title: Text("Settings"), message: nil, buttons: [
            .default(Text("Delete"), action: {
            }),
            .cancel()
        ])
    }
}
}

1
请问,操作表和导航栏自定义不能同时使用是一种已记录的行为吗?我个人认为这是 SwiftUI 中的一个错误,并已提交了错误报告。顺便说一下:另一个可能的解决方法是将 actionSheet 包装在条件语句中,其中条件与 isPresented 使用的条件相同。 - Adam
1
我也认为这是一个bug,我没有找到任何关于它的文档。建议的解决方法是个好主意。 - Viktor Maric

0

添加

.navigationViewStyle(StackNavigationViewStyle())

对我来说,将其添加到NavigationView中似乎可以解决这个问题。


如果不使用StackNavigationViewStyle,则此方法无法在iPad上使用。 - Sebastian Boldt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接