首先。我知道 SwiftUI ScrollView 有局限性。我希望能在这里解决这个问题。
我的问题是我有一个聊天框...所以有一个带有 ScrollView 和文本输入的 VStack。我能够使文本输入适应键盘...即,当您键入时,它会随着键盘向上移动。
问题是 ScrollView 丢失了其滚动位置。因此,如果您滚动到底部然后激活键盘...您将不再看到底部。它几乎就像一个 ZStack。
我想要的是模仿与 WhatsApp 相同的行为,在输入新消息时保持滚动位置。
我知道 ScrollViewReader 和scrollTo...在这种情况下这似乎是一种黑客行为,我希望避免它。如果有的话,也许有与布局相关的修复?
幸运的是,我能够通过添加.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)
| 归档时间: |
|
| 查看次数: |
6186 次 |
| 最近记录: |