SwiftUI ScrollView 键盘避免

Tim*_*erz 5 swiftui

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

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

问题是 ScrollView 丢失了其滚动位置。因此,如果您滚动到底部然后激活键盘...您将不再看到底部。它几乎就像一个 ZStack。

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

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

Tim*_*erz 2

幸运的是,我能够通过添加.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
            }
    }
}
Run Code Online (Sandbox Code Playgroud)