【问题标题】:SWIFTUI: Can't dismiss Sheet after changing ScreenSize classesSWIFTUI:更改 ScreenSize 类后无法关闭工作表
【发布时间】:2020-07-24 17:10:58
【问题描述】:

我在 SwiftUI 中使用以下按钮切换工作表

Button(action: {
                    self.statusPopoverIsShown.toggle()
                })

于是出现了下面的表格

.sheet(isPresented: self.$popoverIsShown) {
                    RandomSheet(popoverIsShown: self.$popoverIsShown)
}

然后我在 RandomSheet 中有一个按钮来关闭工作表(将 popoverIsShown 设置为 false)。一切正常。

但是当我开始在分屏中使用应用程序或以某种方式更改 sizeclass 时,SwiftUI 会将工作表转换为类似 iPhone 的全屏工作表,并且关闭按钮/绑定不再起作用。

有没有办法避免这种情况并保持绑定稳定?

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    以下适用于任何尺寸等级的更改。使用 Xcode 12 / iOS 14 测试

    struct TestSheet: View {
        @State private var popoverIsShown = false
        var body: some View {
            Button("Show Sheet") {
                self.popoverIsShown = true
            }
            .sheet(isPresented: self.$popoverIsShown) {
                RandomSheet(popoverIsShown: self.$popoverIsShown)
            }
        }
    }
    
    struct RandomSheet: View {
        @Binding var popoverIsShown: Bool
        var body: some View {
            Button("Close") { self.popoverIsShown = false }
        }
    }
    

    【讨论】:

    • 我认为这基本上是我之前所做的,但是当您打开工作表、调整视图大小然后尝试关闭时,它是否适用于 iOS 14?
    • 是的,确实是经过测试的。
    • 好的,很遗憾,我现在无法测试它,因为我无法访问 iOS 14 设备或 xcode12。所以我认为这是一个 iOS 13 错误。感谢您的帮助
    • 我遇到了同样的问题,不幸的是这个解决方案对我不起作用。我从 Apple 的示例应用程序 Fruta 中获取了代码,因此我的 ContentView 在 Horizo​​ntalSizeClass 更改后从选项卡导航更改为侧边栏导航层次结构。当我的工作表出现并更改尺寸等级时,绑定会中断,因此将其设置为 false 无效。
    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2020-07-01
    • 2023-01-12
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多