【问题标题】:SwiftUI ScrollView Keyboard AvoidanceSwiftUI ScrollView 键盘避免
【发布时间】:2021-05-31 09:02:22
【问题描述】:

首先。我知道 SwiftUI ScrollView 有局限性。我希望在这里解决这个问题。

我的问题是我有一个聊天框...所以是一个带有 ScrollView 和文本输入的 VStack。我能够使文本输入适应键盘...即当您键入时,它会使用键盘向上移动。

问题是 ScrollView 失去了滚动位置。所以,如果你滚动到底部然后激活键盘……你就看不到底部了。它几乎就像一个 ZStack。

我想要的是模仿与 WhatsApp 相同的行为,即在输入新消息时保持滚动位置。

我知道 ScrollViewReader 和 scrollTo...在这种情况下这似乎是一个 hack,我希望避免它。如果有的话,也许有与布局相关的修复?

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    幸运的是,我能够通过将 .keyboardAdaptive() 添加到 ScrollView 文本输入以及从填充更改为偏移来解决此问题

    struct KeyboardAdaptive: ViewModifier {
        @State private var keyboardHeight: CGFloat = 0
    
        @State var offset: CGFloat
        
        func body(content: Content) -> some View {
            content
                .offset(y: -keyboardHeight)
                .onReceive(Publishers.keyboardHeight) {
                    self.keyboardHeight = $0 == 0 ? 0 : $0 - offset
                }
        }
    }
    

    【讨论】:

    • 这看起来是一个很好的答案@Timmerz,但我不确定Publishers.keyboardHeight 来自哪里?
    猜你喜欢
    • 2021-04-18
    • 1970-01-01
    • 2021-03-09
    • 2023-02-06
    • 2021-01-06
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    相关资源
    最近更新 更多