在 SwiftUI 中关闭键盘后导航栏不返回默认显示模式

问题描述 投票:0回答:0

我遇到了 SwiftUI 中导航栏行为的问题。当我的视图上的 TextField 获得焦点并出现键盘时,导航栏切换到内联显示模式,这是预期的行为。但是,当键盘关闭时,导航栏仍然处于半透明背景的内联显示模式,而不是返回到默认的大显示模式。

screen

screen

screen

我试过在 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)
                }
            }
        }
    }
}
swift swiftui scrollview navigationbar
© www.soinside.com 2019 - 2024. All rights reserved.