这个错误快把我逼疯了。有时(大多数情况下)呈现的工作表在第一次打开时会被忽略。这种情况仅发生在设备上并且仅在应用程序第一次启动时发生。这是使用 Xcode 12.1 构建的运行 iOS 14.1 的 iPhone 11 上的外观(也可以在运行 iOS 14.0.1 的 iPhone 7 Plus 上重现):
视频中的步骤:
这是SwitUI App项目(使用UIKIt App Delegate)和部署iOS 14。代码:
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: DetailsView()) {
Text("Open Details View")
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct DetailsView: View {
@State var sheetIsPresented: Bool = false
var body: some View {
VStack {
Button("Open") {
sheetIsPresented.toggle()
}
}.sheet(isPresented: $sheetIsPresented, content: {
SheetView()
})
}
}
struct SheetView: View {
var body: some View {
Color.red
}
}
Run Code Online (Sandbox Code Playgroud)
我能够通过删除 line 来解决这个问题.navigationViewStyle(StackNavigationViewStyle()),但StackNavigationViewStyle我的项目中需要。任何帮助将不胜感激。
更新:Apple 论坛上有一个类似的帖子,其中工作表视图的行为随机奇怪。我发现的一种解决方案是将工作表移至外部的根视图NavigationLink(在ContentView我的示例中),但这不是理想的解决方案。
我在应用程序中遇到了同样的问题。经过大量研究,我发现将变量设为观察对象可以解决 SwiftUI 1 中的问题,并且似乎在 SwiftUI 2 中也是如此。我确实记得这是实际设备上的间歇性问题,但它总是发生在模拟器中。我希望我能记住为什么,也许当工作表出现时它会重置绑定变量?但是这段代码解决了问题:
import SwiftUI
import Combine
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: DetailsView()) {
Text("Open Details View")
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
struct DetailsView: View {
@ObservedObject var sheetIsPresented = SheetIsPresented.shared
var body: some View {
VStack {
Button("Open") {
sheetIsPresented.value.toggle()
}
}.sheet(isPresented: $sheetIsPresented.value, content: {
SheetView()
})
}
}
struct SheetView: View {
var body: some View {
Color.red
}
}
final class SheetIsPresented: NSObject, ObservableObject {
let objectWillChange = PassthroughSubject<Void, Never>()
static let shared = SheetIsPresented()
@Published var value: Bool = false {
willSet {
objectWillChange.send()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
在模拟器中的 Xcode 12.1、iOS 14.1 上进行了测试。
| 归档时间: |
|
| 查看次数: |
1796 次 |
| 最近记录: |