// // KeyboardReader.swift // ComposeUI // // Created by Shadowfacts on 3/7/23. // #if !os(visionOS) import UIKit import Combine @available(iOS, obsoleted: 16.0) class KeyboardReader: ObservableObject { // @Published var isVisible = false @Published var keyboardHeight: CGFloat = 0 var isVisible: Bool { // when a hardware keyboard is connected, the height is very short, so we don't consider that being "visible" keyboardHeight > 72 } init() { NotificationCenter.default.addObserver(self, selector: #selector(willShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willHide), name: UIResponder.keyboardWillHideNotification, object: nil) } @objc func willShow(_ notification: Foundation.Notification) { let endFrame = notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect // isVisible = endFrame.height > 72 keyboardHeight = endFrame.height } @objc func willHide() { // sometimes willHide is called during a SwiftUI view update DispatchQueue.main.async { // self.isVisible = false self.keyboardHeight = 0 } } } #endif