swiftui - SwiftUI @State 和 .sheet() ios13 与 ios14
问题描述
您好,我在这里遇到了问题,在 ios13 或 ios14 上运行时,我的 .sheet() 视图之间的行为不一致
我有这样的看法:
@State private var label: String = ""
@State private var sheetDisplayed = false
///Some code
var body: some View {
VStack {
Button(action: {
self.label = "A label"
self.isDisplayed = true
}) {
Text("test")
}
}.sheet(isPresented: $sheetDisplayed, onDismiss: {
self.label = ""
}) {
Text(self.label)
}
}
在 ios 13 上,这项工作按预期工作 btn 单击 -> 设置标签 -> 调用表 -> 在文本视图中显示“A 标签”。
在 ios14 上,当我关闭工作表时,self.label 中有一个空字符串,因此它不显示任何内容。
我错过了什么吗?是 iOS 14 的错误还是我在 ios13 上弄错了,并得到了纠正。
PS:我在闭包中传递了几个其他变量,我对其进行了简化。
解决方案
您的代码期望视图更新/创建顺序,但通常它是未定义的(并且可能在 iOS 14 中更改)。
有明确的方式在工作表内传递信息 - 使用不同的工作表创建者,即。.sheet(item:...
这是工作可靠的例子。使用 Xcode 12 / iOS 14 测试
struct ContentView: View {
@State private var item: Item?
struct Item: Identifiable {
let id = UUID()
var label: String = ""
}
var body: some View {
VStack {
Button(action: {
self.item = Item(label: "A label")
}) {
Text("test")
}
}.sheet(item: $item, onDismiss: {
self.item = nil
}) {
Text($0.label)
}
}
}
推荐阅读
- reactjs - event.Preventdefault 有问题
- javascript - 我可以在抓取时阻止将我的请求重定向到移动网站吗?
- asp.net-mvc-5 - 如何在 MVC 5 中将模型返回给 ajax 调用
- sql - 如何在 postgres 容器中运行 shell 脚本以确定数据库是否为空,如果不是则导入备份 SQL 脚本
- javascript - 如何在函数构造函数中使用标签
- google-apps-script - 在 Google Sheet 上创建公式
- scala - 如何在循环内为这些向量调用方法?
- spring - 'mvn clean install' 后找不到主类
- c - 按索引访问字符串与推进指针
- xcode - OpenCV:未授权捕获视频 OpenCV:相机未能正确初始化