我开始尝试在WWDC 2019上宣布的新SwiftUI框架,并在https://developer.apple.com/tutorials/swiftui上开始了该教程。
现在我到了通过services.AddMvc(options => options.EnableEndpointRouting = false)
将配置文件连接到主屏幕的地步。更确切地说,我在PresentationButton
中谈论这段代码:
Home.swift
当我第一次单击该按钮时,“个人资料表”看起来很好,但是当我关闭它,然后再次单击该按钮时,什么也没有发生。
有人知道为什么会这样吗?
预先感谢
答案 0 :(得分:8)
它看起来像SwiftUI中的错误。
它可能与从未调用onDisappear
的事实有关。
您可以通过添加
.onAppear{
print("Profile appeared")
}.onDisappear{
print("Profile disappeared")
}
进入ProfileHost
视图。为了完全完成撤消,appear
应该与disappear
保持平衡。
可以通过实现一个返回PresentationButton
“依赖”状态变量的函数来解决该问题。
@State var profilePresented: Int = 0
func profileButton(_ profilePresented: Int) -> some View {
return PresentationButton(
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding(),
destination: ProfileHost(),
onTrigger: {
let deadlineTime = DispatchTime.now() + .seconds(2)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: {
self.profilePresented += 1
})
})
}
然后替换
.navigationBarItems(trailing:
PresentationButton(
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding(),
destination: ProfileHost()
)
)
使用
.navigationBarItems(trailing: self.profileButton(self.profilePresented))
我强烈建议不要使用此“解决方案”,而应将错误报告给Apple。
答案 1 :(得分:0)
解决此问题的最简单方法是自行保留destination:参数,并将Image对象放在花括号中:
PresentationButton(destination: ProfileHost()) {
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding()
}
答案 2 :(得分:0)
此问题已在Beta 3中修复。我也遇到了同样的问题,即PresentationButton(现在为PresentationLink)嵌入到.navigationBarItems中时仅触发一次。
答案 3 :(得分:-2)
这是Xcode 11 Beta2中解决的错误:https://developer.apple.com/documentation/xcode_release_notes/xcode_11_beta_2_release_notes。
使用更新的API,以下各项应能工作:
PresentationButton(destination:ProfileHost()) {
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding()
}