2017-08-05 3 views
1

Ich versuche, eine Stapelansicht über die Tastatur zu bewegen, wenn der Benutzer tippt. Ich verwende den folgenden Code, um die Höhe der Tastatur zu erhalten (aus Move view with keyboard using Swift entnommen).Tastaturhöhe 0

Wenn die Tastatur zum ersten Mal angezeigt wird, funktioniert der Code keyboardSize.height wird als 226.0 ausgegeben. Wenn die Tastatur jedoch nach dem ersten Mal erneut angezeigt wird, wird keyboardSize.height als 0.0 ausgegeben. Daher habe ich Probleme, meine Stapelansicht ständig zu verschieben, wenn die Tastatur angezeigt wird. Gelegentlich würde der Code nach dem ersten Versuch wieder funktionieren, aber es dauert nicht mehr als einmal und verhält sich inkonsistent.

Wenn ich einfach ausdrucken keyboardSize, das erste Mal würde ich (0.0, 736.0, 414.0, 226.0) bekommen. Nach dem ersten Mal wird keyboardSize als (0.0, 736.0, 414.0, 0.0) ausgegeben, sodass nur die Höhe falsch wird.

Wie konnte ich die Höhe der Tastatur konsistent erhalten? Warum tritt dieses Problem auf?

override func viewDidLoad() { 
     NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil) 
     NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil) 
} 

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

@objc func keyboardWillHide(notification: NSNotification) { 
     if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{ ... } 
} 
+0

könnten Sie bitte beschreiben, was bedeutet "wenn die Tastatur nach dem ersten Mal erscheint wieder"? –

+0

@TungFam Ja. Wenn ich etwas in die Suchleiste eintippe, erscheint die Tastatur. Wenn ich mit der Eingabe fertig bin und die Suche drücke, verschwindet die Tastatur. Wenn ich Text in der Suchleiste umziehe, würde die Tastatur wieder erscheinen, das meine ich mit "wenn die Tastatur nach dem ersten Mal wieder erscheint". –

+0

Haben Sie schon eine Lösung für diesen gefunden? Ich denke, es ist ein Problem mit iOS 11 Beta. Weil ich mit der gleichen Sache konfrontiert war und als ich es auf iOS 10 getestet habe, ist es nicht passiert. – TawaNicolas

Antwort

0

Wenn Sie die Stapelansicht über Tastatur Eingabezubehöransicht, und Sie haben canBecomeFirstResponder Zubehör Blick auf true, als wenn die Tastatur dann firt Zeit erscheint wird es Ihnen ursprüngliche Höhe geben, aber wenn man in der Nähe der Tastatur Im Fall der Verwendung von Accessoryview geht es zuerst an die Tastatur-Close-Benachrichtigung und dann wieder an die Tastatur, um die Benachrichtigungsfunktion zu öffnen. So erhalten Sie beim Schließen auch eine Tastaturöffnungshöhe. Verwenden Sie Breakpoints in beiden Funktionen, um dies zu bestätigen und Ihr Problem zu lösen, indem Sie einige Prüfvariablen verwenden. Hinweis ****** muss lesen über Eingabeaccessory Ansicht beste Möglichkeit, um Ansicht über Tastatur wie in Chat-Apps hinzuzufügen.

1

Verwenden Sie dies;

UIKeyboardFrameEndUserInfoKey

Objective C;

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
0

verwenden Code:

CGSize keyboardSize = 
    [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 
Verwandte Themen