我遇到了 SwiftUI 中导航栏行为的问题。当我的视图上的 TextField 获得焦点并出现键盘时,导航栏切换到内联显示模式,这是预期的行为。但是,当键盘关闭时,导航栏仍然处于半透明背景的内联显示模式,而不是返回到默认的大显示模式。
我试过在 TextField 失去焦点时将 navigationBarTitleDisplayMode 设置为 .large,但它似乎没有任何效果。
struct ChatView<HeaderView: View>: View {
var body: some View {
VStack {
scrollContent
...
}
.onTapGesture {
fieldFocus = false
}
.simultaneousGesture(DragGesture().onChanged({ _ in
fieldFocus = false
}))
}
var scrollContent: some View {
ScrollView(showsIndicators: false) {
ScrollViewReader { reader in
VStack(alignment: .leading){
...
content
.padding(.horizontal)
}
.padding(.top)
.onChange(of: service.displayedQuestions) { _ in
scrollToBottom(reader: reader)
}
.onChange(of: fieldFocus) { fieldFocus in
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
scrollToBottom(reader: reader)
}
}
.onChange(of: service.ended) { _ in
scrollToAnswer(reader: reader)
}
}
}
}
}