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