SwiftUI Tutorial Презентация Кнопка Bug - PullRequest
4 голосов
/ 10 июня 2019

Я начал экспериментировать с новой платформой SwiftUI, анонсированной на WWDC 2019, и начал учебник по https://developer.apple.com/tutorials/swiftui.

Теперь я подошел к точке, где подключить профиль к HomeScreen через PresentationButton.Точнее, я говорю об этом разделе кода в Home.swift:

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

Когда я впервые нажимаю на кнопку, лист профиля выглядит просто отлично, но когда я отклоняю его и затем снова нажимаю на кнопкуНичего не произошло.

Кто-нибудь знает, почему это так?

Заранее спасибо

Ответы [ 4 ]

8 голосов
/ 10 июня 2019

Похоже, ошибка в 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.

0 голосов
/ 04 июля 2019

Это было исправлено в бета-версии 3. У меня также была та же проблема, когда PresentationButton (теперь PresentationLink) запускался только один раз при внедрении в .navigationBarItems.

0 голосов
/ 22 июня 2019

Эта ошибка была устранена в 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()
}
0 голосов
/ 21 июня 2019

Самый простой способ решить эту проблему - оставить параметр destination: самостоятельно и поместить объект Image в фигурные скобки:

PresentationButton(destination: ProfileHost()) {
    Image(systemName: "person.crop.circle")
        .imageScale(.large)
        .accessibility(label: Text("User Profile"))
        .padding()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...