2017-02-18 12 views

Antwort

0

Wenn Sie daran interessiert sind nur in der Höhe der Tastatur sind, können Sie UIKeyboardDidChangeFrame Benachrichtigungen

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

Hinweis beachten dass die Höhe der Tastatur auch dann "voll" bleibt, wenn sie nicht auf dem Bildschirm angezeigt wird. Diese Benachrichtigungen sind nur für Frame-Änderungen interessant, die auf Sprachänderungen der Tastatur oder das Anzeigen/Verbergen der Auto-Vervollständigen-Buttons zurückzuführen sind.

Wenn Sie wissen möchten, dass der Rahmen der Tastatur 0 ist, wenn der Bildschirm ausgeht, können Sie die obigen Observablen mit UIKeyboardWillShow und UIKeyboardHide Benachrichtigungen kombinieren.

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) 
    } 
} 

Daraus werden Sie die Werte von zuvor keyboardHeight definiert emittiert erhalten, wenn es auf dem Bildschirm ist, und 0, wenn sie es verlässt.

Verwandte Themen