我开始尝试新的SwiftUI框架,该框架在WWDC 2019上宣布,并在 https://developer.apple.com/tutorials/swiftui 开始了教程。
现在我到了通过以下方式将配置文件连接到主屏幕的地步 PresentationButton
.更准确地说,我正在谈论Home.swift
中的这段代码:
.navigationBarItems(trailing:
PresentationButton(
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding(),
destination: ProfileHost()
)
)
当我第一次单击按钮时,配置文件表看起来很好,但是当我关闭它然后再次单击该按钮时,没有任何反应。
有谁知道为什么会这样?
提前致谢
它看起来像 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。
解决此问题的最简单方法是将 destination: 参数保留为独立,并将 Image 对象放在大括号中:
PresentationButton(destination: ProfileHost()) {
Image(systemName: "person.crop.circle")
.imageScale(.large)
.accessibility(label: Text("User Profile"))
.padding()
}
这在 Beta 3 中得到了修复。 我也有同样的问题,PresentationButton(现在的PresentationLink(在嵌入.navigationBarItems时只触发一次。
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()
}