gpt4 book ai didi

ios - 为什么 EmptyView() 不能在带有 SwiftUI 的 WatchOS 上工作?

转载 作者:行者123 更新时间:2023-12-01 19:31:33 24 4
gpt4 key购买 nike

NavigationView()在 swiftUI 下的 WatchOS 上不起作用,但我发现了一个巧妙的技巧(?)here让 NavigationView 在 WatchOS 上运行。添加此项允许使用 NavigationView()在 watchOS 项目中

#if os(watchOS)
struct NavigationView<Content: View>: View {
let content: () -> Content

init(@ViewBuilder content: @escaping () -> Content) {
self.content = content
}

var body: some View {
VStack(spacing: 0) {
content()
}
}
}
#endif
问题是,我想用来从函数(如按钮)弹出新 View 的方法需要显示 EmptyView() 的 NavigationLink。 ,虽然这适用于 iOS,但不适用于 WatchOS。
iOS上的工作代码:
import SwiftUI

struct ContentView: View {

@State var showNewView = false

var body: some View {
NavigationView{
VStack {
NavigationLink(destination: Text("This text view"), isActive: self.$showNewView) {EmptyView()}

Button("Not the world!") {
self.showNewView = true
}
Text("Hello, World!")
}
}
}
}
如果您将该代码放入一个新的 WatchOS 应用程序中,并包含相关代码片段以使 NavigationView 在 WatchOS 上工作,它允许创建应用程序,但更改 View 的按钮不会执行任何操作。
它将改变变量 showNewView为真(我已经通过 print 语句进行了测试)但变为真不会显示新 View 。
如果我在其中放置一个非空 View (类似于 Text("Merry Christmas") ),它将起作用。
我目前正在寻找另一种解决方案来解决我的问题,即通过函数(而不是通过使用 NavigationView 制作某种列表)在 SwiftUI 中显示新 View ,但我很好奇发生了什么。我认为这与用于让 NavigationView 在 WatchOS 上运行的黑客行为有关,但我真的不知道该代码片段是如何工作的。

最佳答案

这是一个解决方案 - 只需将导航链接放入后台即可。
使用 Xcode 11.4 测试

VStack {
Button("Not the world!") {
self.showNewView = true
}
.background(NavigationLink(destination: Text("This text view"),
isActive: self.$showNewView) {EmptyView()} )

Text("Hello, World!")
}

关于ios - 为什么 EmptyView() 不能在带有 SwiftUI 的 WatchOS 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62502329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com