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

标签 ios swift swiftui apple-watch watchos

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

#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 更改为 true(我已经通过 print 语句进行了测试),但变为 true 将不会显示新 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/

相关文章:

ios - swift 错误 : ambiguous reference to member 'jsonObject(with:options:)

ios - 如何消除 UICollectionView 的标题和单元格之间的差距?

ios - 快速获取用户的联系人电话号码

iOS - 位置更改时 SwiftUI 更新文本

ios - UISearchController 类似于 Apple map

ios - 当我添加 SKAudioNode 时应用程序在模拟器中崩溃?

objective-c - 将静态库导入自定义通用框架

ios - iOS 可以在后台模式下捕捉视频吗?

ios - 如何将可选 View 传递给 SwiftUI 中的另一个 View ?

ios - 如何在 SwiftUI 中进行异步更新后解雇发布者?