swiftui - SwiftUI ScrollView 键盘避免
问题描述
首先关。我知道 SwiftUI ScrollView 有局限性。我希望在这里解决这个问题。
我的问题是我有一个聊天框......所以一个带有 ScrollView 和文本输入的 VStack。我能够使文本输入适应键盘...即当您键入时,它会随着键盘向上移动。
问题是 ScrollView 失去了滚动位置。所以,如果你滚动到底部然后激活键盘……你就看不到底部了。它几乎就像一个 ZStack。
我想要的是模仿与 WhatsApp 相同的行为,它在输入新消息时保持滚动位置。
我知道 ScrollViewReader 和 scrollTo ......在这种情况下这似乎是一个 hack,我希望避免它。如果有的话,也许有与布局相关的修复?
解决方案
幸运的是,我能够通过添加.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
}
}
}
推荐阅读
- php - 注册后发送生成的令牌以进行电子邮件验证
- reactjs - 谷歌地图/街景负坐标
- linux-kernel - 在 yocto 的一次编译中生成两个不同的内核映像
- react-native - 使用来自 firebase 存储的 react-native-video 播放视频
- php - 适用于 .html 文件,不适用于 .php 文件
- reactjs - React:渲染新页面/组件
- c++ - 构造器获取初始化列表
- python - 为什么树在将数据框显示为树视图时不可滚动?
- excel - VBA Excel 到 Word 自动化不保存格式
- vue.js - Nuxt:有没有办法持久化 $auth.user?