Для приложения, которое я разрабатываю, у меня есть заметный заголовок, который мы хотим видеть на нашей домашней странице. Я хочу, чтобы он исчез при переходе к дочернему представлению, динамическому представлению c, встроенному в созданный мной элемент SwiftUI, озаглавленный CategoryRow
.
У меня это работает, вроде как, когда заголовок исчезает при переходе в NavigationLink
, который я встроил в CategoryRow
. Единственная проблема в том, что время отклика немного медленное, и кажется, что событие onDisappear
внутри NavigationLink
только иногда срабатывает. Вот рисунок, который демонстрирует точное поведение, с которым я сталкиваюсь:

Вот некоторые из соответствующих кодов, которые у меня есть в моем родительском представлении, которое я назвал FeedView
:
@State private var showHeader = true // showHeader will be a state variable passed between the parent and child in order to show/hide the header
var body: some View {
VStack(spacing: 0) {
if showHeader { // update and show/hide the header embedded in the HStack on state change
HStack(spacing: 0) {
// header
}
}
NavigationView {
List(categories.keys.sorted(), id: \String.self) {
// we pass the state variable over to the CategoryRow class to be used in appear/disappear
key in CategoryRow(nameOfCategory: "\(key)".uppercased(), posts: self.posts[key]!, showHeader: self.$showHeader)
}
}
(дочерний вид; элемент CategoryRow):
@Binding var showHeader: Bool // bind the passed in showHeader variable so we can pass it back to the parent when updates need to happen
// ...
NavigationLink(destination: ExpandMediaView(post: post)
.onAppear { self.showHeader = false } // after testing, this onAppear ALWAYS manages to fire
.onDisappear { self.showHeader = true } // why does this only fire sometimes?
)
Код иногда попадает только в часть .onDisappear
NavigationLink, что иногда означает заголовок появляется в родительском классе, а иногда нет. Вдобавок ко всему, его показ / скрытие составляет около миллисекунды за навигацией по страницам. Кто-нибудь работал над такой проблемой раньше?