Swiftui 在iPad上,VStack内的NavigationLink被破坏

Swiftui 在iPad上,VStack内的NavigationLink被破坏,swiftui,Swiftui,考虑一下这个非常简单的视图:只有几个指向其他页面的链接。如果你在iPhone上运行这个程序,一切正常。然而,在iPad上运行这个程序,你会发现大多数时候链接根本不起作用。sim卡和真实设备出现故障,这令人惊讶 当您将VStack更改为列表时,突然间一切正常 struct ContentView:View{ var body:一些观点{ 导航视图{ VStack{ 导航链接(目的地:文本(“链接1”)){ 文本(“链接1”) .padding(.vertical) } 导航链接(目的地:文本(“链

考虑一下这个非常简单的视图:只有几个指向其他页面的链接。如果你在iPhone上运行这个程序,一切正常。然而,在iPad上运行这个程序,你会发现大多数时候链接根本不起作用。sim卡和真实设备出现故障,这令人惊讶

当您将
VStack
更改为
列表
时,突然间一切正常

struct ContentView:View{
var body:一些观点{
导航视图{
VStack{
导航链接(目的地:文本(“链接1”)){
文本(“链接1”)
.padding(.vertical)
}
导航链接(目的地:文本(“链接2”)){
文本(“链接2”)
.padding(.vertical)
}
导航链接(目的地:文本(“链接3”)){
文本(“链接3”)
.padding(.vertical)
}
导航链接(目的地:文本(“链接4”)){
文本(“链接4”)
.padding(.vertical)
}
导航链接(目的地:文本(“链接5”)){
文本(“链接5”)
.padding(.vertical)
}
}
文本(“你好,iPad”)
}
}
}
还有其他人遇到过这个问题吗?为什么会发生这种情况,解决办法是什么?除了明显的“使用列表”:p我正在使用
VStack
s和
HStack
s的网格以多列显示链接,可根据设备大小进行配置。因此,如果不是100%必要的话,更改为
列表将不可取。

找到了一个解决方法:

struct ContentView:View{
@状态变量showLink1=false
//..另外四个呢
var body:一些观点{
导航视图{
ZStack{
名单{
导航链接(目的地:文本(“链接1”),isActive:$showLink1){
EmptyView()
}
//..另外四个呢
}
.不透明度(0)
VStack{
按钮(操作:{self.showLink1=true}){
文本(“链接1”)
.padding(.vertical)
}
//..另外四个呢
}
}
文本(“你好,iPad”)
}
}
}

哦,SwiftUI…

我建议您先阅读文档,然后再尝试找到一些“解决方法”


@KevinRenskers这不是任何解决办法,这是苹果打算如何使用它。。。如果你觉得我咄咄逼人,我道歉。我同意,这里缺少文档,在xcode中按住ctrl键的同时使用“跳转到定义”。这是到目前为止我们所拥有的最好的,我很抱歉地说,你的代码在iPhone上并没有像预期的那样工作:如果你先打开链接1,然后打开链接2,它会立即跳回列表。我的变通方法虽然有更多的代码,但在iPhone和iPad上都能很好地工作。我(遗憾地)现在要坚持下去。模拟器上有已知的错误,它在设备上按预期工作。@KevinRenskers在设备上检查它!当前的模拟器上有一个已知的错误,它在设备上工作,因为它必须工作。它确实在设备上工作,但由于我使用模拟器进行大部分开发,它真的会扼杀生产力。让我们都希望苹果能尽快解决这些漏洞:)
 // Creates an instance that presents `destination` when `selection` is set
 // to `tag`.
    public init<V>(destination: Destination, tag: V, selection: Binding<V?>, @ViewBuilder label: () -> Label) where V : Hashable
struct ContentView: View {
    @State var selection: Int? = 0
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Link 0"), tag: 0, selection: $selection) {
                    Text("link 0")
                }
                NavigationLink(destination: Text("Link 1"), tag: 1, selection: $selection) {
                    Text("link 1")
                }
                NavigationLink(destination: Text("Link 2"), tag: 2, selection: $selection) {
                    Text("link 2")
                }

            }

            Text("Hello iPad user, swipe from left to continue ...")
        }
    }
}