【发布时间】:2020-11-16 00:22:38
【问题描述】:
所以我有一个类,其中包含一个名为keyboardHeight 的已发布变量,用于检索keyboardHeight 的值:
import UIKit
class KeyboardHeightHelper: ObservableObject {
@Published var keyboardHeight: CGFloat = 0
init() {
self.listenForKeyboardNotifications()
}
private func listenForKeyboardNotifications() {
NotificationCenter.default.addObserver(forName: UIResponder.keyboardDidShowNotification,
object: nil,
queue: .main) { (notification) in
guard let userInfo = notification.userInfo,
let keyboardRect = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
self.keyboardHeight = keyboardRect.height
}
NotificationCenter.default.addObserver(forName: UIResponder.keyboardDidHideNotification,
object: nil,
queue: .main) { (notification) in
self.keyboardHeight = 0
}
}
}
然后,在 ContentView 中,我只有一个 TextField,当您开始/停止编辑该字段时应该打印键盘高度:
import SwiftUI
struct ContentView: View {
@State var textFieldText = ""
@ObservedObject var keyboardHeightHelper = KeyboardHeightHelper()
var body: some View {
VStack {
TextField("Text field",
text: $textFieldText, onEditingChanged: { _ in print("the keyboard height is \(self.keyboardHeightHelper.keyboardHeight)") })
}
}
}
我遇到的问题是:当我不编辑文本字段然后单击它时,它会打印键盘高度为0.0(我猜这是因为它在呈现键盘之前抓取了keyboardHeight值,所以当时高度为 0.0,因为没有看到键盘)。当我按下回车键并关闭键盘时,键盘的高度(对于 iPhone 8 模拟器)被打印为 260.0 的正确值。我的问题是当我开始编辑时如何访问键盘的值?
【问题讨论】:
-
@Subha_26 好吧,我真的不想要填充——我只需要访问 CGFloat 值,看起来这个问题只是添加了填充,如果我说实话,代码超出了我的范围所以如果你真的可以正确访问 CGFloat 值,我很抱歉
标签: swift keyboard swiftui textfield editing