Mit dem iOS SDK:
Ich habe ein UIView
mit UITextField
s, das eine Tastatur aufruft. Ich brauche es, um:
Ermöglichen Sie das Scrollen des Inhalts von
UIScrollView
, um die anderen Textfelder anzuzeigen, sobald die Tastatur aufgerufen wirdAutomatisch "springen" (durch Scrollen nach oben) oder verkürzen
Ich weiß, dass ich eine brauche UIScrollView
. Ich habe versucht, die Klasse von my UIView
in a zu ändern , kann UIScrollView
aber die Textfelder immer noch nicht nach oben oder unten scrollen.
Benötige ich sowohl ein UIView
als auch ein UIScrollView
? Geht einer in den anderen?
Was muss implementiert werden, um automatisch zum aktiven Textfeld zu scrollen?
Idealerweise wird so viel wie möglich von der Einrichtung der Komponenten in Interface Builder durchgeführt. Ich möchte nur Code für das schreiben, was er benötigt.
Hinweis: Das UIView
(oder UIScrollView
), mit dem ich arbeite, wird durch eine Tab-Leiste ( UITabBar
) angezeigt , die wie gewohnt funktionieren muss.
Bearbeiten: Ich füge die Bildlaufleiste nur für den Fall hinzu, dass die Tastatur hochgefahren wird. Auch wenn es nicht benötigt wird, bietet es meiner Meinung nach eine bessere Benutzeroberfläche, da der Benutzer dann beispielsweise Textfelder scrollen und ändern kann.
Ich habe es zum Laufen gebracht, wo ich die Bildgröße ändere, UIScrollView
wenn die Tastatur auf und ab geht. Ich benutze einfach:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
//Keyboard becomes visible
scrollView.frame = CGRectMake(scrollView.frame.origin.x,
scrollView.frame.origin.y,
scrollView.frame.size.width,
scrollView.frame.size.height - 215 + 50); //resize
}
-(void)textFieldDidEndEditing:(UITextField *)textField {
//keyboard will hide
scrollView.frame = CGRectMake(scrollView.frame.origin.x,
scrollView.frame.origin.y,
scrollView.frame.size.width,
scrollView.frame.size.height + 215 - 50); //resize
}
Dies bewegt sich jedoch nicht automatisch nach oben oder zentriert die unteren Textfelder im sichtbaren Bereich, was ich wirklich gerne hätte.
quelle
Antworten:
Sie benötigen nur eine,
ScrollView
wenn der Inhalt, den Sie jetzt haben, nicht in den iPhone-Bildschirm passt. (Wenn Sie dieScrollView
als Übersicht der Komponenten hinzufügen, um beim Hochfahren derTextField
Tastatur einen Bildlauf durchzuführen , ist dies nicht erforderlich.)Die Standardmethode, um zu verhindern, dass das
TextField
s von der Tastatur abgedeckt wird, besteht darin, die Ansicht nach oben / unten zu verschieben, wenn die Tastatur angezeigt wird.Hier ist ein Beispielcode:
quelle
textFieldDidBeginEditing
Abschnitt auskommentieren.Ich hatte auch große Probleme mit dem
UIScrollView
Komponieren von mehrerenUITextFields
, von denen einer oder mehrere von ihnen durch die Tastatur verdeckt werden, wenn sie bearbeitet werden.Hier sind einige Dinge zu beachten, wenn Sie
UIScrollView
nicht richtig scrollen.1) Stellen Sie sicher, dass Ihre contentSize größer als die
UIScrollView
Frame-Größe ist. Der Weg zu verstehenUIScrollViews
ist, dass dasUIScrollView
wie ein Anzeigefenster für den in contentSize definierten Inhalt ist. Wenn alsoUIScrollview
irgendwo gescrollt werden soll, muss die contentSize größer sein als dieUIScrollView
. Andernfalls ist kein Bildlauf erforderlich, da alles, was in contentSize definiert ist, bereits sichtbar ist. Übrigens, default contentSize =CGSizeZero
.2) Nachdem Sie nun verstanden haben, dass
UIScrollView
es sich tatsächlich um ein Fenster in Ihrem "Inhalt" handelt, können Sie sicherstellen, dass die Tastatur IhrUIScrollView's
"Anzeigefenster" nicht verdecktUIScrollView
, indem Sie die Größe ändern , damit Sie dasUIScrollView
Fenster haben, wenn die Tastatur vorhanden ist Größe nur auf die ursprünglicheUIScrollView
Rahmengröße. Höhe abzüglich der Höhe der Tastatur. Dadurch wird sichergestellt, dass Ihr Fenster nur diesen kleinen sichtbaren Bereich aufweist.3) Hier ist der Haken: Als ich dies zum ersten Mal implementierte, dachte ich, ich müsste
CGRect
das bearbeitete Textfeld abrufen und dieUIScrollView's
scrollRecToVisible-Methode aufrufen. Ich habe dieUITextFieldDelegate
MethodetextFieldDidBeginEditing
mit dem Aufruf derscrollRecToVisible
Methode implementiert . Dies funktionierte tatsächlich mit einem seltsamen Nebeneffekt, dass das Scrollen die Position einrasten ließUITextField
. Am längsten konnte ich nicht herausfinden, was es war. Dann habe ich dietextFieldDidBeginEditing
Delegate-Methode auskommentiert und alles funktioniert !! (???). Wie sich herausstellte, glaube ich, dass dasUIScrollView
tatsächlich implizit das aktuell bearbeiteteUITextField
implizit in das sichtbare Fenster bringt . Meine Implementierung derUITextFieldDelegate
Methode und der anschließende Aufruf vonscrollRecToVisible
war redundant und war die Ursache für die seltsame Nebenwirkung.So sind hier die Schritte , um richtig Ihre blättern
UITextField
in einemUIScrollView
an Ort und Stelle , wenn die Tastatur erscheint.viewDidLoad
viewDidUnload
contentSize
eingestellt und größer als IhrUIScrollView
at istviewDidLoad
UIScrollView
wenn die Tastatur vorhanden istUIScrollView
wenn die Tastatur weg geht.UITextField
Registerkarte angezeigt wird, auch wenn die Tastatur bereits vorhanden ist, um ein Verkleinern der Tastatur zu vermeiden,UIScrollView
wenn sie bereits verkleinert istEine Sache zu beachten ist, dass das
UIKeyboardWillShowNotification
wird auch dann ausgelöst, wenn die Tastatur bereits auf dem Bildschirm angezeigt wird, wenn Sie auf eine andere tippenUITextField
. Ich habe mich darum gekümmert, indem ich einen Ivar verwendet habe, um die Größe nicht zu ändern,UIScrollView
wenn die Tastatur bereits auf dem Bildschirm angezeigt wird. Eine versehentliche Größenänderung,UIScrollView
wenn die Tastatur bereits vorhanden ist, wäre katastrophal!Hoffe, dieser Code erspart einigen von Ihnen viel Kopfschmerzen.
quelle
UIKeyboardBoundsUserInfoKey
ist veraltet. 2. Tastaturgröße wird in "Bildschirmkoordinaten" angegeben, sodass Ihre viewFrame-Berechnungen fehlschlagen, wenn der Rahmen gedreht oder skaliert wird.CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
anstelle der veraltetenUIKeyboardBoundsUserInfoKey
[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size
sollte sein[[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size
. Tolle Lösung!Es ist eigentlich am besten, nur die Apple-Implementierung zu verwenden, wie in den Dokumenten angegeben . Der von ihnen bereitgestellte Code ist jedoch fehlerhaft. Ersetzen Sie den Teil
keyboardWasShown:
direkt unter den Kommentaren durch Folgendes:Die Probleme mit Apples Code sind folgende: (1) Sie berechnen immer, ob der Punkt innerhalb des Rahmens der Ansicht liegt, aber es ist ein
ScrollView
, sodass er möglicherweise bereits gescrollt hat und Sie diesen Versatz berücksichtigen müssen:(2) Sie verschieben das contentOffset um die Höhe der Tastatur, aber wir wollen das Gegenteil (wir wollen das
contentOffset
um die Höhe verschieben, die auf dem Bildschirm sichtbar ist, nicht um das, was nicht ist):quelle
UIKeyboardFrameEndUserInfoKey
anstelleUIKeyboardFrameBeginUserInfoKey
der Tastaturgröße zu verwenden, da hierdurch Dinge wie benutzerdefinierte Tastaturänderungen und das Ein- und Ausschalten von Texterkennung erfasst werden.self.scrollView.contentOffset = self.currentSVoffset;
In
textFieldDidBeginEditting
und intextFieldDidEndEditing
rufen Sie die Funktion[self animateTextField:textField up:YES]
wie folgt auf:Ich hoffe, dieser Code wird Ihnen helfen.
In Swift 2
SWIFT 3
quelle
[UIView animateWithDuration: animations:^{ }];
?Nur mit TextFields:
1a) Verwenden von
Interface Builder
: Wählen Sie Alle Textfelder => Bearbeiten => Einbetten => ScrollView1b) Manuelles Einbetten von TextFields in UIScrollView mit dem Namen scrollView
2) Einstellen
UITextFieldDelegate
3) Stellen Sie jede ein
textField.delegate = self;
(oder stellen Sie Verbindungen herInterface Builder
)4) Kopieren / Einfügen:
quelle
textField
es bereits sichtbar ist.CGPointMake(0, textField.frame.origin.y);
umCGPointMake(0, textField.frame.origin.y + scrollView.contentInset.top);
Für Universal Solution war hier mein Ansatz zur Implementierung von IQKeyboardManager .
Schritt 1: - Ich Added globale Benachrichtigungen über
UITextField
,UITextView
undUIKeyboard
in einer Singleton - Klasse. Ich nenne es IQKeyboardManager .Schritt 2: - Wenn Sie gefunden werden
UIKeyboardWillShowNotification
,UITextFieldTextDidBeginEditingNotification
oderUITextViewTextDidBeginEditingNotification
Benachrichtigungen, ich versuche zu bekommentopMostViewController
Instanz aus derUIWindow.rootViewController
Hierarchie. Um richtig aufzudeckenUITextField
/UITextView
Sie darauftopMostViewController.view
braucht ‚s Rahmen angepasst werden.Schritt 3: - Ich habe die erwartete Bewegungsentfernung in
topMostViewController.view
Bezug auf die zuerst beantworteteUITextField
/ berechnetUITextView
.Schritt 4: - Ich habe
topMostViewController.view.frame
mich entsprechend der erwarteten Bewegungsentfernung nach oben / unten bewegt.Schritt 5: - Wenn Sie gefunden werden
UIKeyboardWillHideNotification
,UITextFieldTextDidEndEditingNotification
oderUITextViewTextDidEndEditingNotification
Benachrichtigung, ich noch einmal versuchen zu bekommentopMostViewController
Instanz aus derUIWindow.rootViewController
Hierarchie.Schritt 6: - Ich habe die gestörte Entfernung berechnet
topMostViewController.view
, deren ursprüngliche Position wiederhergestellt werden muss.Schritt 7: - Ich habe
topMostViewController.view.frame
entsprechend der gestörten Entfernung wiederhergestellt .Schritt 8: - Ich habe die Singleton- IQKeyboardManager- Klasseninstanz beim Laden der App instanziiert , sodass sich jedes
UITextField
/UITextView
in der App automatisch an die erwartete Bewegungsentfernung anpasst.Das ist alles IQKeyboardManager für Sie tun mit NO Codezeile wirklich !! Sie müssen nur die zugehörige Quelldatei per Drag & Drop in das Projekt ziehen. IQKeyboardManager auch unterstützen Geräteausrichtung , automatische UIToolbar - Management , KeybkeyboardDistanceFromTextField und viel mehr , als Sie denken.
quelle
Ich habe eine universellen zusammen, Drop-in
UIScrollView
,UITableView
und sogarUICollectionView
Unterklasse , die Pflege zu bewegen , alle Textfelder in ihn aus dem Weg der Tastatur erfolgt.Wenn die Tastatur angezeigt wird, findet die Unterklasse die Unteransicht, die bearbeitet werden soll, und passt den Rahmen- und Inhaltsversatz an, um sicherzustellen, dass die Ansicht sichtbar ist. Die Animation entspricht dem Popup der Tastatur. Wenn die Tastatur verschwindet, wird die vorherige Größe wiederhergestellt.
Es sollte grundsätzlich mit jedem Setup funktionieren, entweder mit einer
UITableView
Schnittstelle oder mit manuell platzierten Ansichten.Hier ist es: Lösung zum Verschieben von Textfeldern aus dem Weg der Tastatur
quelle
Dies
UITextFieldDelegate
erledigt alles für Sie. Fügen Sie diese einfach in Ihre View Controller-Klasse ein, implementieren Sie sie in Ihren View Controller und setzen Sie den Delegaten von textField aufself
Implementieren Sie die Delegate-Rückrufmethoden:
Für Swift 4, 4.2, 5: Ändern
zu
Letzter Hinweis zu dieser Implementierung: Wenn Sie einen anderen Ansichts-Controller auf den Stapel schieben, während die Tastatur angezeigt wird, wird ein Fehler erzeugt, bei dem die Ansicht wieder in den mittleren Rahmen zurückgesetzt wird, der Tastaturversatz jedoch nicht zurückgesetzt wird. Zum Beispiel ist Ihre Tastatur der erste Antwortende für nameField, aber dann drücken Sie eine Taste, die Ihren Help View Controller auf Ihren Stapel drückt. Um den Offset-Fehler zu beheben, rufen Sie nameField.resignFirstResponder () auf, bevor Sie den Ansichts-Controller verlassen, und stellen Sie sicher, dass auch die delegate-Methode textFieldDidEndEditing aufgerufen wird. Ich mache das in der viewWillDisappear-Methode.
quelle
self.view.frame = CGRectOffset(self.view.frame, 0, movement)
also änderte ich diese Zeile inself.view.frame.offsetInPlace(dx: 0, dy: movement)
Es gibt bereits viele Antworten, aber dennoch hatte keine der oben genannten Lösungen all das ausgefallene Positionierungsmaterial, das für eine "perfekte" fehlerfreie, abwärtskompatible und flimmerfreie Animation erforderlich ist. (Fehler beim gemeinsamen Animieren von Frame / Bounds und ContentOffset, unterschiedliche Benutzeroberflächenausrichtungen, geteilte iPad-Tastatur, ...)
Lassen Sie mich meine Lösung teilen:
(vorausgesetzt, Sie haben eingerichtet
UIKeyboardWill(Show|Hide)Notification
)quelle
UIApplication.shared.sendAction(...)
. Hier ist die Swift 3-Version Ihrer Antwort (minus willHide-Teil) mit dersendAction
implementierten: gist.github.com/xaphod/7aab1302004f6e933593a11ad8f5a72dShiun sagte: "Wie sich herausstellte, bringt UIScrollView das aktuell bearbeitete UITextField implizit implizit in das sichtbare Fenster." Dies scheint für iOS 3.1.3 zu gelten, nicht jedoch für 3.2, 4.0 oder 4.1. Ich musste ein explizites scrollRectToVisible hinzufügen, um das UITextField unter iOS> = 3.2 sichtbar zu machen.
quelle
[UITextField scrollTextFieldToVisibleIfNecessary]
Methode aufruft , die wiederum aufruft,[UIScrollView scrollRectToVisible]
wenn sie[UITextField becomeFirstResponder]
aufgerufen wird. Siehe github.com/leopatras/ios_textfields_on_scrollview . Wenn Einschränkungen und Ansichtscontroller ordnungsgemäß eingerichtet sind, muss nichtscrollRectToVisible
explizit aufgerufen werden (zumindest seit IOS 11).Eine Sache zu überlegen ist, ob Sie jemals eine
UITextField
für sich allein verwenden möchten . Ich habe keine gut gestalteten iPhone-Apps gefunden, die tatsächlichUITextFields
außerhalb von verwendet werdenUITableViewCells
.Es wird einige zusätzliche Arbeit sein, aber ich empfehle Ihnen, alle Dateneingabeansichten und Tabellenansichten zu implementieren. Fügen Sie ein
UITextView
zu Ihrem hinzuUITableViewCells
.quelle
UITableView
ist leider der einzige Weg zu gehen. Tastaturbenachrichtigungen sind spröde und haben sich im Laufe der Zeit geändert. Beispielcode für StapelüberlaufDieses Dokument enthält eine Lösung für dieses Problem. Sehen Sie sich den Quellcode unter "Verschieben von Inhalten, die sich unter der Tastatur befinden" an. Es ist ziemlich einfach.
EDIT: Es wurde festgestellt, dass das Beispiel einen kleinen Fehler enthält. Sie werden wahrscheinlich hören wollen
UIKeyboardWillHideNotification
stattUIKeyboardDidHideNotification
. Andernfalls wird die Bildlaufansicht hinter der Tastatur für die Dauer der Animation zum Schließen der Tastatur abgeschnitten.quelle
Einfachste Lösung gefunden
quelle
int movement = (up ? -movementDistance : movementDistance);
if (textField.frame.origin.y < self.view.frame.size.height - keyboard.height) { movementDistance = 0 }
Bitte nicht, dass diekeyboard
Variable der CGRect der Tastatur ist, die angezeigt wird, wenn Sielet keyboard = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey]!.CGRectValue())!
Kleine Korrektur, die für viele UITextFields funktioniert
quelle
rect.origin.y=+currTextField.frame.origin.y
funktioniert gut dankeDer RPDP-Code verschiebt das Textfeld erfolgreich aus dem Weg der Tastatur. Wenn Sie jedoch nach dem Verwenden und Schließen der Tastatur nach oben scrollen, wurde die Oberseite aus der Ansicht nach oben gescrollt. Dies gilt für den Simulator und das Gerät. Um den Inhalt oben in dieser Ansicht zu lesen, muss die Ansicht neu geladen werden.
Soll sein folgender Code nicht die Ansicht wieder beeinträchtigen?
quelle
Ich bin mir nicht sicher, ob das Verschieben der Ansicht der richtige Ansatz ist. Ich habe es anders gemacht und die Größe der UIScrollView geändert. Ich habe es in einem kleinen Artikel ausführlich erklärt
quelle
Fügen Sie Folgendes hinzu, um zum ursprünglichen Ansichtsstatus zurückzukehren:
quelle
Versuchen Sie diesen kurzen Trick.
quelle
Es gibt so viele Lösungen, aber ich habe einige Stunden damit verbracht, bevor es funktioniert. Also habe ich diesen Code hier eingefügt (einfach in das Projekt einfügen, Änderungen sind nicht erforderlich):
PS: Ich hoffe, der Code hilft jemandem, schnell den gewünschten Effekt zu erzielen. (Xcode 4.5)
quelle
@ user271753
Um Ihre Ansicht wieder auf das Original zu bringen, fügen Sie Folgendes hinzu:
quelle
Es ist keine Bildlaufansicht erforderlich, um den Ansichtsrahmen verschieben zu können. Sie können den Rahmen einer
viewcontroller's
Ansicht so ändern , dass die gesamte Ansicht gerade so weit nach oben verschoben wird, dass das Erstantwort-Textfeld über der Tastatur angezeigt wird. Als ich auf dieses Problem stieß, erstellte ich eine Unterklasse vonUIViewController
, die dies tut. Es wird beobachtet, dass für die Tastatur eine Benachrichtigung angezeigt wird, und es wird die Unteransicht des Ersthelfer gefunden. (Falls erforderlich) wird die Hauptansicht gerade so weit nach oben animiert, dass sich der Ersthelfer über der Tastatur befindet. Wenn sich die Tastatur ausblendet, wird die Ansicht wieder dort animiert, wo sie war.Um diese Unterklasse zu verwenden, machen Sie Ihren benutzerdefinierten Ansichts-Controller zu einer Unterklasse von GMKeyboardVC und erbt diese Funktion (stellen Sie nur sicher, dass Sie sie implementieren
viewWillAppear
undviewWillDisappear
sie müssen super aufrufen). Die Klasse ist auf Github .quelle
Swift 4 .
Sie können leicht auf und ab
UITextField
oderUIView
mitUIKeyBoard
mit bewegenAnimation
quelle
Hier ist die Hack-Lösung, die ich für ein bestimmtes Layout entwickelt habe. Diese Lösung ähnelt der Matt Gallagher-Lösung, indem ein Abschnitt in die Ansicht gescrollt wird. Ich bin noch neu in der iPhone-Entwicklung und kenne die Funktionsweise der Layouts nicht. Also dieser Hack.
Meine Implementierung musste das Scrollen beim Klicken in ein Feld und das Scrollen unterstützen, wenn der Benutzer als Nächstes auf der Tastatur auswählt.
Ich hatte ein UIView mit einer Höhe von 775. Die Steuerelemente sind grundsätzlich in Dreiergruppen über einen großen Raum verteilt. Am Ende hatte ich das folgende IB-Layout.
Hier kommt der Hack
Ich habe die UIScrollView-Höhe auf 500 Einheiten eingestellt, die größer sind als das tatsächliche Layout (1250). Ich habe dann ein Array mit den absoluten Positionen erstellt, zu denen ich scrollen muss, und eine einfache Funktion, um sie basierend auf der IB-Tag-Nummer zu erhalten.
Jetzt müssen Sie nur noch die folgenden zwei Codezeilen in textFieldDidBeginEditing und textFieldShouldReturn verwenden (letztere, wenn Sie eine nächste Feldnavigation erstellen).
Ein Beispiel.
Diese Methode wird nicht wie andere Methoden zurückgescrollt. Dies war keine Voraussetzung. Wieder war dies für ein ziemlich "großes" UIView, und ich hatte keine Tage, um die internen Layout-Engines zu lernen.
quelle
Gemäß der Dokumentation , wie von iOS 3.0, die die
UITableViewController
Größe der Klasse automatisch und positioniert seine Tabellenansicht , wenn in-line ist die Bearbeitung von Textfeldern. Ich denke, es reicht nicht aus, das Textfeld in ein zu setzenUITableViewCell
wie einige angegeben haben.Aus den Dokumenten :
quelle
Sie müssen nur den Beispielcode kopieren und einfügen und Ihr Textfeld oder eine Ansicht ändern, die Sie nach oben verschieben möchten.
Schritt 1
Schritt 2
Schritt 3
Hinweis : Nun, bitte schätzen Sie diesen Kerl Nun, , der diese schöne, saubere Lösung mit Code-Snip geteilt hat.
Hoffe das wäre sicherlich hilfreich jemand da draußen.
quelle
Sie haben nach einem guten Tutorial für Anfänger zu diesem Thema gesucht und hier das beste Tutorial gefunden .
Stellen Sie im
MIScrollView.h
Beispiel unten im Tutorial ein Leerzeichen einwie du siehst.
quelle
Wann
UITextField
sich einUITableViewCell
Bildlauf befindet, sollte automatisch eingerichtet werden.Wenn dies nicht der Fall ist, liegt dies wahrscheinlich an falschem Code / Setup der Tabellenansicht.
Zum Beispiel, als ich meinen langen Tisch
UITextField
wie folgt mit einem unten neu geladen habe :Dann wurde mein Textfeld unten durch die Tastatur verdeckt, die beim Klicken in das Textfeld angezeigt wurde.
Um dies zu beheben, musste ich dies tun -
quelle
viewWillAppear
wird sie nicht aufgerufen. UndreloadData
macht verdeckte Zeilen nicht sichtbar.Verwenden Sie diesen Drittanbieter, Sie müssen nicht einmal eine Zeile schreiben
https://github.com/hackiftekhar/IQKeyboardManager
Laden Sie das Projekt herunter und ziehen Sie es per Drag & Drop
IQKeyboardManager
in Ihr Projekt. Wenn Sie ein Problem finden, lesen Sie bitte dasREADME
Dokument.Jungs wirklich seine Kopfschmerzen entfernen, um die Tastatur zu verwalten.
quelle
Hinweis : Bei dieser Antwort wird davon ausgegangen, dass sich Ihr Textfeld in einer Bildlaufansicht befindet.
Ich bevorzuge es, mit scrollContentInset und scrollContentOffset damit umzugehen, anstatt mit den Frames meiner Ansicht herumzuspielen.
Lassen Sie uns zuerst auf die Tastaturbenachrichtigungen warten
Der nächste Schritt besteht darin, eine Eigenschaft beizubehalten, die den aktuellen Ersthelfer darstellt (UITextfield / UITextVIew, das derzeit über die Tastatur verfügt).
Wir verwenden die Delegate-Methoden, um diese Eigenschaft festzulegen. Wenn Sie eine andere Komponente verwenden, benötigen Sie etwas Ähnliches.
Beachten Sie, dass wir es für das Textfeld in didBeginEditing und für textView in shouldBeginEditing festlegen. Dies liegt daran, dass textViewDidBeginEditing aus irgendeinem Grund nach UIKeyboardWillShowNotification aufgerufen wird.
Schließlich ist hier die Magie
quelle
Dies ist die Lösung mit Swift.
quelle