2017-02-18 5 views

答えて

0

あなたは、キーボードの高さにのみ関心がある場合、あなたはUIKeyboardDidChangeFrame通知

let keyboardHeight = NotificationCenter.default.rx 
    .notification(NSNotification.Name.UIKeyboardDidChangeFrame) 
    .map { notification -> CGFloat in 
    (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue.height ?? 0 
    } 

注意を観察することができます画面の外に出てもキーボードの高さは「フル」のままです。これらの通知は、キーボードの言語の変更や自動補完ボタンの表示/非表示によるフレームの変更にのみ興味があります。

あなたはそれがの画面になったとき、あなたはUIKeyboardWillShowUIKeyboardHide通知に上記観測可能に組み合わせることができ、キーボードのフレームは0であることを考慮知りたい場合。このことから

enum KeyboardState { 
    case onScreen 
    case offScreen 
} 

let keyboardOnScreenHeight = Observable.from([ 
    NotificationCenter.default.rx.notification(NSNotification.Name.UIKeyboardWillShow) 
    .map { _ in KeyboardState.onScreen } 
    NotificationCenter.default.rx.notification(NSNotification.Name.UIKeyboardWillHide) 
    .map { _ in KeyboardState.offScreen } 
]) 
.merge() 
.flatMapLatest { state in 
    switch state { 
    case .onScreen: keyboardHeight 
    case .offScreen: .just(0) 
    } 
} 

それはそれを終了すると、それは画面上、および0であるとき、あなたはから放出された値は、以前keyboardHeightを定義しますよ。

関連する問題