Анимация скрытия NavigationView на SwiftUI
У меня есть HStack, который отвечает за строку поиска. При нажатии на него срабатывает метод navigationBarHidden, который скрывает NavigationView без анимации (это хорошо видно, когда мы выходим из состояния поиска и видим, как HStack пролетает поверх заголовка):
Однако мне нужно использовать какой-то другой метод, чтобы изменить стиль NavigationBar на .inline, как это сделано у Apple (я предполагаю, что это сделано так, но утверждать мне не хватает знаний, так как я всего пару дней пишу на iOS):
Вот код View:
import SwiftUI
struct Messages: View {
@State private var searchText = ""
@State private var showCancelButton: Bool = false
var body: some View {
NavigationView {
VStack {
HStack {
HStack {
Image(systemName: "magnifyingglass")
TextField("Поиск по сообщениям", text: $searchText, onEditingChanged: { isEditing in
self.showCancelButton = true
}, onCommit: {}).foregroundColor(.primary)
Button(action: {
self.searchText = ""
}) {
Image(systemName: "xmark.circle.fill").opacity(searchText == "" ? 0 : 1)
}
}
.padding(EdgeInsets(top: 8, leading: 6, bottom: 8, trailing: 6))
.foregroundColor(.secondary)
.background(Color(.secondarySystemBackground))
.cornerRadius(10.0)
if showCancelButton {
Button("Отменить") {
UIApplication.shared.endEditing(true)
self.searchText = ""
self.showCancelButton = false
}
.foregroundColor(Color(.systemBlue))
}
}
.padding(.horizontal)
.navigationBarHidden(showCancelButton)
.animation(.default)
List {
MessageCell()
}
.navigationBarTitle(Text("Сообщения"))
.animation(.default)
.resignKeyboardOnDragGesture()
}
}
}
}
struct Messages_Previews: PreviewProvider {
static var previews: some View {
Group {
Messages()
.environment(\.colorScheme, .light)
}
}
}
extension UIApplication {
func endEditing(_ force: Bool) {
self.windows
.filter{$0.isKeyWindow}
.first?
.endEditing(force)
}
}
struct ResignKeyboardOnDragGesture: ViewModifier {
var gesture = DragGesture().onChanged{_ in
UIApplication.shared.endEditing(true)
}
func body(content: Content) -> some View {
content.gesture(gesture)
}
}
extension View {
func resignKeyboardOnDragGesture() -> some View {
return modifier(ResignKeyboardOnDragGesture())
}
}
Помогите разобраться со скрытием NavigationView и прикручиванием к этому красивой анимации.

