适用于iOS14.5的SwiftUINavigationLink不起作用
我在 Xcode 12.4 中有以下代码完美运行
ScrollView(.horizontal, showsIndicators: false) {
LazyHGrid(rows: rows, spacing: 0) {
HStack {
if (type == "Quiz") {
NavigationLink(destination: Quiz(id: quiz.id)) {
VStack(alignment: .leading) {
Text("Quiz")
.font(.headline)
.foregroundColor(.white)
.padding(.top, 8)
.padding(.leading)
}
.background(Color.green)
.cornerRadius(12)
.shadow(color: .green, radius: 3, x: 0.0, y: 0.0)
}
} else {
NavigationLink(destination: Survey(id: survey.id)) {
VStack(alignment: .leading) {
Text("Survey")
.font(.headline)
.foregroundColor(.white)
.padding(.top, 8)
.padding(.leading)
}
.background(Color.green)
.cornerRadius(12)
.shadow(color: .green, radius: 3, x: 0.0, y: 0.0)
}
} // End If
if (type == "Quiz") {
NavigationLink(destination: QuizResults(id: quiz.id)) {
VStack(alignment: .leading) {
Text("Quiz Results")
.font(.headline)
.foregroundColor(.white)
.padding(.top, 8)
.padding(.leading)
}
.background(Color.blue)
.cornerRadius(12)
.shadow(color: .blue, radius: 3, x: 0.0, y: 0.0)
}
} else {
NavigationLink(destination: SurveyResults(id: survey.id)) {
VStack(alignment: .leading) {
Text("Survey Results")
.font(.headline)
.foregroundColor(.white)
.padding(.top, 8)
.padding(.leading)
}
.background(Color.blue)
.cornerRadius(12)
.shadow(color: .blue, radius: 3, x: 0.0, y: 0.0)
}
}
}
.padding([.leading, .trailing], 25)
}
.frame(height: 100)
我刚刚将 Xcode 更新到 12.5,上面的不再起作用。
它在 12.4 中运行良好!?
现在,当我单击“测验”元素时,它开始过渡到测验视图,该视图显示它但立即关闭视图,我又回到了详细信息视图!?
有人可以看到我做错了什么,为什么现在根据 12.5 的更新停止工作?
更新
我将代码改进为最小的可重现形式。似乎正在发生的是我有两个或更多的NavigationLinks 集。
第一个是将用户导航到测验或调查的集合,if 语句将用户引导到要填写的正确视图。
12.5 中的问题在于,用户可以单击以查看测验或调查的整体结果的第二组在第一次导航之后直接不起作用。
就像我之前说的那样,它在 12.4 中运行良好,但似乎 12.5 不同意。有人可以为用户提供一种更好的方式来单击元素以填写测验或调查或查看测验或调查的结果吗?
回答
我遇到了完全相同的问题,在 Xcode 12.4 上一切正常。
https://developer.apple.com/forums/thread/677333
我尝试关注此线程,它可能会起作用,但在某些情况下,我仍然有此错误。
NavigationLink(destination: EmptyView()) { EmptyView() }
显然,您可以将这 3 行代码放在您的 NavigationLink 附近...如果有人得到更好的答案,我将不胜感激!
- I am noticing that the solution ti use EmptyView throws the following error `Unable to present. Please file a bug.` Not sure if thats a big deal other than just white noise at this point, but I hope apple wont block the app from their store!?
回答
多么可怕的错误!根据我的测试和一些谷歌搜索,当视图中恰好有 2 个导航链接时,就会发生这种情况。问题中的代码有 4 个,但由于 if else 语句,一次实际上只有 2 个。
我经常不知道我将拥有多少导航链接,因为这取决于用户添加的数据/有多少搜索点击等。为了安全起见,我已经制作了一个tripleEmptyNavigationLink 修饰符,我一直卡在最后我所有的观点。它正在解决弹出行为,但我仍然收到“无法呈现”警告。很想知道是否有人有比这更好的东西!
import SwiftUI
struct TripleEmptyNavigationLink: View {
var body: some View {
VStack {
NavigationLink(destination: EmptyView()) {EmptyView()}
NavigationLink(destination: EmptyView()) {EmptyView()}
NavigationLink(destination: EmptyView()) {EmptyView()}
}
}
}
struct TripleEmptyNavigationLinkBackground: ViewModifier {
func body(content: Content) -> some View {
content
.background(TripleEmptyNavigationLink())
}
}
extension View {
func tripleEmptyNavigationLink()-> some View {
self.modifier(TripleEmptyNavigationLinkBackground())
}
}
用法:
MyView()
.tripleEmptyNavigationLink()