34 lines
		
	
	
		
			929 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			929 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  KeyboardHandler.swift
 | 
						|
//  SodaLive
 | 
						|
//
 | 
						|
//  Created by klaus on 2023/08/09.
 | 
						|
//
 | 
						|
 | 
						|
import SwiftUI
 | 
						|
import Combine
 | 
						|
 | 
						|
final class KeyboardHandler: ObservableObject {
 | 
						|
    @Published private(set) var keyboardHeight: CGFloat = 0
 | 
						|
    
 | 
						|
    private var cancellable: AnyCancellable?
 | 
						|
    
 | 
						|
    private let keyboardWillShow = NotificationCenter.default
 | 
						|
        .publisher(for: UIResponder.keyboardWillShowNotification)
 | 
						|
        .compactMap { ($0.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect)?.height }
 | 
						|
    
 | 
						|
    private let keyboardWillHide = NotificationCenter.default
 | 
						|
        .publisher(for: UIResponder.keyboardWillHideNotification)
 | 
						|
        .map { _ in CGFloat.zero }
 | 
						|
    
 | 
						|
    init() {
 | 
						|
        cancellable = Publishers.Merge(keyboardWillShow, keyboardWillHide)
 | 
						|
            .subscribe(on: DispatchQueue.main)
 | 
						|
            .assign(to: \.self.keyboardHeight, on: self)
 | 
						|
    }
 | 
						|
    
 | 
						|
    deinit {
 | 
						|
        cancellable = nil
 | 
						|
    }
 | 
						|
}
 |