Move View with Keyboard Using Swift: Optimierung und Leistung
\n\nJeder iOS-Entwickler ist mindestens einmal auf die Situation gestoßen, dass die Tastatur frech ein UITextField oder UITextView überdeckt. Der Benutzer tippt in das Feld, die Tastatur fährt aus, aber die Benutzeroberfläche bleibt unbeeindruckt. Das Ergebnis: Frustration, Eingabefehler und das Löschen der App. Die Lösung dieses Problems in Swift ist nicht einfach nur „move view with keyboard“, sondern eine ganze Wissenschaft für sich, was Leistung und Benutzererfahrung angeht.
In diesem Artikel werden wir analysieren, wie man move view with keyboard using Swift richtig implementiert, Animationen optimiert und typische Fehler vermeidet. Sie erhalten fertigen Code, den Sie sofort in Ihr Projekt einfügen können, und verstehen, warum einige Ansätze die UI verlangsamen, während andere einwandfrei funktionieren.
\n\nWarum funktionieren Standardlösungen oft schlecht?
\n\nAuf Stack Overflow hat die Frage „Move view with keyboard using Swift“ tausende Aufrufe. Und das ist kein Zufall. Viele Anfänger kopieren die erstbeste Lösung aus dem Jahr 2015, die UIKeyboardWillShowNotification verwendet und den Frame von UIView hart ändert. Das Ergebnis: ruckelige Animationen, Speicherlecks und Fehler auf verschiedenen iPhone-Modellen.
Die Hauptprobleme alter Ansätze:
\n- \n
- Direkte Änderung des
frameohne Berücksichtigung dessafe area; \n - Ignorieren der Dauer und der Animationskurven der Tastatur; \n
- Fehlende Behandlung von Bildschirmdrehung und Multitasking; \n
- Vergesslichkeit: Benachrichtigungen werden nicht entfernt, Objekte werden nicht bereinigt. \n
Modernes Swift (5.0+) und UIKit ermöglichen es, alles elegant und schnell zu erledigen. Lassen Sie uns das optimale Muster durchgehen.
\n\nVorbereitung: Was wir brauchen
\n\nFür die Implementierung von move view with keyboard using Swift werden wir verwenden:
\n- \n
NotificationCenterzum Verfolgen von Tastaturereignissen; \n UIView.animatemit Parametern aus der Benachrichtigung; \n UIScrollViewals Basiscontainer (aber es geht auch ohne); \n - Richtiges Speichermanagement (weak self, removeObserver). \n
Den gesamten Code schreiben wir in UIViewController. Wenn Sie SwiftUI verwenden, sind die Prinzipien dieselben, aber die API ist eine andere (dazu am Ende des Artikels).
Schritt 1: Tastaturbenachrichtigungen registrieren
\n\nDas Erste, was wir tun müssen, ist, uns für zwei wichtige Benachrichtigungen anzumelden: UIResponder.keyboardWillShowNotification und UIResponder.keyboardWillHideNotification. Sie geben uns die Größe, Dauer und die Animationskurve der Tastatur.
override func viewDidLoad() {\n super.viewDidLoad()\n \n NotificationCenter.default.addObserver(\n self,\n selector: #selector(keyboardWillShow),\n name: UIResponder.keyboardWillShowNotification,\n object: nil\n )\n \n NotificationCenter.default.addObserver(\n self,\n selector: #selector(keyboardWillHide),\n name: UIResponder.keyboardWillHideNotification,\n object: nil\n )\n}\n\n\nBeachten Sie: object: nil bedeutet, dass wir Benachrichtigungen von jeder Tastatur hören. Das ist für die meisten Fälle korrekt.
Schritt 2: Der Handler keyboardWillShow
\n\nIn dieser Methode extrahieren wir die Größe der Tastatur und die Dauer der Animation aus der Benachrichtigung. Dann verschieben wir die Ansicht um die Höhe der Tastatur nach oben.
\n\n@objc private func keyboardWillShow(_ notification: Notification) {\n guard let userInfo = notification.userInfo,\n let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,\n let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,\n let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else {\n return\n }\n \n let keyboardHeight = keyboardFrame.height\n let animation