Move View with Keyboard Swift: Optimierung und Leistung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Move View with Keyboard Using Swift: Optimierung und Leistung

\n\n

Jeder 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.

\n\n

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\n

Warum funktionieren Standardlösungen oft schlecht?

\n\n

Auf 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.

\n\n

Die Hauptprobleme alter Ansätze:

\n
    \n
  • Direkte Änderung des frame ohne Berücksichtigung des safe 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
\n\n

Modernes Swift (5.0+) und UIKit ermöglichen es, alles elegant und schnell zu erledigen. Lassen Sie uns das optimale Muster durchgehen.

\n\n

Vorbereitung: Was wir brauchen

\n\n

Für die Implementierung von move view with keyboard using Swift werden wir verwenden:

\n
    \n
  • NotificationCenter zum Verfolgen von Tastaturereignissen;
  • \n
  • UIView.animate mit Parametern aus der Benachrichtigung;
  • \n
  • UIScrollView als Basiscontainer (aber es geht auch ohne);
  • \n
  • Richtiges Speichermanagement (weak self, removeObserver).
  • \n
\n\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).

\n\n

Schritt 1: Tastaturbenachrichtigungen registrieren

\n\n

Das 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.

\n\n
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\n

Beachten Sie: object: nil bedeutet, dass wir Benachrichtigungen von jeder Tastatur hören. Das ist für die meisten Fälle korrekt.

\n\n

Schritt 2: Der Handler keyboardWillShow

\n\n

In 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                

Blogs

Buchempfehlungen