【问题标题】:SwiftUI navigation bar title and items does not disappear when swiping back failsSwiftUI导航栏标题和项目在向​​后滑动失败时不会消失
【发布时间】:2020-03-28 01:54:23
【问题描述】:

问题是导航栏的标题和项目没有消失,这是一个意外的行为。

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()
            ])
        }

}

}

【问题讨论】:

  • 我也有同样的问题。这真的很烦人。你修好了吗?
  • 我刚刚发现只有在详细信息页面上有 BarButtonItems 时才会出现该问题
  • 到目前为止有什么好的解决方案吗?我遇到了完全相同的问题。但对我来说,如果我以编程方式关闭视图,它就会出现。

标签: ios swift xcode uinavigationbar swiftui


【解决方案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()
        ])
    }
}
}

【讨论】:

  • 操作表不能与导航栏自定义一起使用是否已记录在案?我个人觉得这是 SwiftUI 中的一个错误,并提交了一个错误报告。仅供参考:另一种可能的解决方法是将actionSheet 包装在条件与isPresented 使用的条件相同的条件中。
  • 我也认为这是一个错误,我还没有找到任何文档。建议的解决方法是个好主意。
【解决方案2】:

添加

.navigationViewStyle(StackNavigationViewStyle())

到 NavigationView 似乎可以为我修复它。

【讨论】:

  • 如果你想在没有 StackNavigationViewStyle 的 iPad 上使用它,这不起作用。
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多