FullScreenCover 不关闭 - SwiftUI
Posted
技术标签:
【中文标题】FullScreenCover 不关闭 - SwiftUI【英文标题】:FullScreenCover not dismissing - SwiftUI 【发布时间】:2020-12-16 01:26:12 【问题描述】:我有一个 .fullScreenCover,当我到达我的应用程序中的某个点时会打开。当我想关闭它并重置应用程序时,我关闭视图并将 ContentView ID 设置为新的 UUID()。这是我的主要应用代码:
class AppState: ObservableObject
static let shared = AppState()
@Published var gameID = UUID()
@main
struct RugbyAppApp: App
@StateObject var appState = AppState.shared
var body: some Scene
WindowGroup
ContentView().id(appState.gameID)
这应该会在我每次打开 ContentView 时生成一个新 ID。当我在按钮中使用另一个 UUID() 更改游戏 ID 以重新启动时,presentationMode.wrappedValue.dismiss()
停止工作,这意味着我无法再返回该视图。
Button("New Game")
AppState.shared.gameID = UUID() //Line x
presentationMode.wrappedValue.dismiss()
根据 Cod3rMax 的评论,这就是我所说的 fullScreenCover:
Button(action: endGameAlert.toggle())
TopPanelButton(buttonText: "End Game", buttonColour: Color.red, buttonWidth: geometry.size.width/10, buttonHeight: geometry.size.width/30)
.alert(isPresented: $endGameAlert)
Alert(title: Text("Are You Sure?"), message: Text("Do you want to end the game?"),
primaryButton: Alert.Button.default(Text("End Game"), action:
stopWatchManager.endGame()
processor.textReport(homeTeam: homeTeam, awayTeam: awayTeam)
exportToPDF(homeTeam: homeTeam, awayTeam: awayTeam, events: processor.matchEvents)
showEnd.toggle()
),
secondaryButton: Alert.Button.cancel(Text("Cancel"), action: )
)
.fullScreenCover(isPresented: $showEnd)
EndGameScreen(homeTeam: homeTeam, awayTeam: awayTeam)
【问题讨论】:
你能把完整的代码贴出来 我现在添加了更多代码! 【参考方案1】:看起来您正在更改封面页关闭之前的状态。这意味着 swiftui 将重建视图层次结构并从根本上使您的演示模式无效。颠倒您的操作顺序应该可以解决您的问题。
【讨论】:
一旦我在中间放了一些打印语句,它就起作用了!只允许视图在更改 ID 之前关闭!以上是关于FullScreenCover 不关闭 - SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 中的透明和模糊 fullScreenCover 模态?
如何在 IOS14 的 .fullScreenCover 下使用参数初始化内容
.fullScreenCover 始终打开相同的详细信息页面