2017-11-22 5 views
0

Ich habe eine sehr kleine Frage - können wir die Tastaturhöhe ohne Verwendung der Benachrichtigung berechnen. Alle Antworten im Spielüberlauf verwenden NSNotification, aber gibt es eine einfachere Möglichkeit, es zu berechnen?Berechnen der Tastaturhöhe ohne Verwendung von NSNotification in swift

unten ist der Code:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil 

@objc func keyboardWillShow(notification: ) { 
    if let userInfo = notification.userInfo { 
     if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      let kbHeight = keyboardSize.height 

      } 
     } 
    } 

-Code Tastaturhöhe in textFieldDidBeginEditing zu verwenden:

var kbHeight: CGFloat? 


@objc func keyboardWillShow(notification: NSNotification) { 
    if let userInfo = notification.userInfo { 
     if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue { 
      kbHeight = keyboardSize.height 

      } 
     } 
    } 


func textFieldDidBeginEditing(_ textField: UITextField) { 

    if textField.frame.maxY > self.kbHeight! 
    { 
     self.scrollView.setContentOffset(CGPoint.init(x: 0, y: textField.frame.maxY - (self.kbHeight! + 2.0)), animated: true) 

    } 

    else{ 
     return 
    } 

    print(textField.frame.maxY) 
    print(self.view.frame.height * 0.6) 
    print(textField.frame.maxY - self.view.frame.height * 0.6) 

} 



func textFieldDidEndEditing(_ textField: UITextField) 
{ 
self.scrollView.setContentOffset(CGPoint.init(x: 0, y: 0), animated: true) 

self.view.endEditing(true); 
} 
+0

Warum Sie nicht verwenden möchten NotificationCenter? –

+0

Hallo Rajesh, ich möchte die Tastaturhöhe Variable in TextFieldDidBeginEditing verwenden und möchte daher wissen, ob ich Höhe ohne Benachrichtigung erhalten kann. Ich habe versucht, die Logik mit Hilfe der Benachrichtigung für die Berechnung der Höhe und dann verwenden Sie es in TextFeidDidBeginEditing, aber kein Glück Ich habe meine oben für Ihre Referenz eingefügt, würde jede Hilfe geschätzt werden –

+0

Der Grund, warum wir die Mitteilungszentrale verwenden, ist die Tastatur Höhe ändert sich entsprechend Tastaturtyp, der für Textfeld, TextView usw. zur Verfügung gestellt wird. Daher gibt es die Größe der Tastatur entsprechend. –

Antwort

0

i Tastatur Höhe eigentlich keine Ahnung haben direkt für immer .. aber man kann sparen Die Tastaturhöhe ist variabel, wenn die Tastatur vorhanden ist, und verwendet sie dort, wo Sie möchten

Verwenden Sie diese beiden Observer für die Tastatur und verwalten Sie die Tastaturhöhe

Muss diese Beobachter bei dinit Methode entfernen, wenn pop oder den View-Controller entlassen.

deinit { 
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
} 

Selector Methoden zur Tastatur Benachrichtigung ...

@objc func keyboardWillShow(notification: NSNotification) { 
    var keyBoardHeight: CGFloat = 0 
    if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue { 
     let keyboardRectangle = keyboardFrame.cgRectValue 
     keyBoardHeight = keyboardRectangle.height 

    } 
} 

@objc func keyboardWillHide(notification: NSNotification) { 
} 
+0

Hi Rajesh, keyboardWillHide und deinit ist nicht mehr erforderlich und var keyBoardHeight: CGFloat = 0 muss außerhalb der TastaturWillShow definiert werden. Dies ist fast der gleiche Code, den ich schrieb .. Das Problem ist var keyBoardHeight ist nicht mit Tastatur Höhe aktualisieren –

+0

Ok, ich denke, Sie brauchen die Tastatur Höhe, wenn Tastatur Höhe geändert wird, wenn ich Ihr Problem verstehe, dann Lösung ist: - verwenden die UIKeyboardDidChangeFrame Observer Benachrichtigung. –

+0

Ich möchte Höhe der Tastatur berechnen und verwenden Sie sie in der TextFieldDidBeginEditing .. aus seltsamen Grund textFieldDidBeginEditing vor der Benachrichtigung aufgerufen und damit konnte ich die Tastatur Höhe Ich glaube, NSNotification.Name.UIKeyboardWillShow ist der richtige Weg, es zu tun, wie es berechnet wird die Höhe der Tastatur vor der Bearbeitung ... Ich habe eine Idee, was hier schief geht –

Verwandte Themen