微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI:导航链接到 TabView 中的 DetailView 崩溃

如何解决SwiftUI:导航链接到 TabView 中的 DetailView 崩溃

目前,如果我尝试在 TextFieldList 中输入嵌套两次的 Detail View,我的应用程序会崩溃并显示错误Thread 1: signal SIGABRT 并在调试器 (缩写):

CoreSimulator --- Device: iPhone 8 (---) - Runtime: iOS 14.4 (----) - DeviceType: iPhone 8
AttributeGraph precondition failure: invalid size for indirect attribute: 73 vs 1.

这是导致此错误代码

struct RootView {
    var body: some View {
        TabView {
            ListView()
                .tag(0)
        }
    }
}
struct ListView {
    @State var isActive = false
    var body: some View {
        ScrollView {
            NavigationView {
                NavigationLink(destination: DetailView(),isActive: $isActive)
            }
        }
    }
}

struct DetailView {
    ...
    var body: some View {
        TextField("Keyboard appears and the app crashes.",text: $text)
    }
}

有没有办法解决这个问题?如果我删除 TabView 那么它就可以正常工作。不过,我需要 TabView,那么有没有办法可以从 TabView 中弹出,然后在 TabView 之外呈现一个详细信息视图?

编辑:使用 UITabViewControllerUIViewControllerRepresentable 解决了该问题。似乎问题出在 TabView

解决方法

我已经通过一些调整测试了您的代码,您使用什么版本的 ios/xcode 似乎可以正常工作?

import SwiftUI
struct RootView: View {
    var body: some View {
        NavigationView {
            TabView {
                ListView().tabItem {
                    Text("test")
                }
                ListView2().tabItem {
                    Text("test2")
                }
            }
        }
    }
}

struct ListView: View {
    @State var isActive = false
    var body: some View {
        ScrollView {
            NavigationLink("test",destination: DetailView(),isActive: $isActive)
        }
    }
}

struct ListView2: View {
    @State var isActive = false
    var body: some View {
        ScrollView {
            NavigationLink("test2",isActive: $isActive)
        }
    }
}

struct DetailView: View {
    @State var text = ""
    var body: some View {
        TextField("Keyboard appears and the app crashes.",text: $text)
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。