小编典典

SwiftUI教程PresentationButton Bug

swift

我开始尝试在WWDC
2019上宣布的新SwiftUI框架,并在https://developer.apple.com/tutorials/swiftui上开始了该教程。

现在,我谈到了通过来将Profile连接到HomeScreen的地步PresentationButton。更确切地说,我在谈论以下代码部分Home.swift

            .navigationBarItems(trailing:
                PresentationButton(
                    Image(systemName: "person.crop.circle")
                        .imageScale(.large)
                        .accessibility(label: Text("User Profile"))
                        .padding(),
                    destination: ProfileHost()
                )
            )

当我第一次单击该按钮时,“配置文件”看起来很好,但是当我关闭它,然后再次单击该按钮时,什么也没有发生。

有谁知道为什么会这样吗?

提前致谢


阅读 542

收藏
2020-07-07

共1个答案

小编典典

它看起来像SwiftUI中的错误。它可能与onDisappear从未被调用的事实有关。您可以通过添加来验证

.onAppear{
  print("Profile appeared")
}.onDisappear{
  print("Profile disappeared")
}

ProfileHost视图。为了完成解雇,appear应该以权衡一个disappear,这是有道理的。

可以通过实现返回PresentationButton“依赖”状态变量的a的函数来解决该问题。

@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。

2020-07-07