Ich habe ein UIScrollView mit einem UIView innerhalb basierend auf einem Artikel, wie Auto-Layout mit Eingabefeldern zu verwenden. Der Artikel erläutert, wie die UIView auf die gleiche Höhe und mit der normalen Ansicht für weitere Information festgelegt wird: https://www.natashatherobot.com/ios-autolayout-scrollview/.UIScrollView Höhe mit Tastatur
Jetzt habe ich mehrere UITextFields in meiner Inhaltsansicht. Wenn ich ein UITextField drücke, möchte ich in meiner Ansicht die Tastatur anzeigen und zum UITextField blättern. Zuerst habe ich versucht, einen Ansatz, der von mehreren verwendet, aber das Problem ist, am unteren Rand des Bildschirms, bekomme ich viel Platz von der Unterseite der Ansicht, die unerwünscht ist. Der Ansatz, den ich versucht wird, mit den folgenden Zeilen:
- (void)keyboardWillHide:(NSNotification *)notification {
[[self scrollView] setContentInset:UIEdgeInsetsMake([[self scrollView] contentInset].top, 0.0f, 0.0f, 0.0f)];
}
- (void)keyboardWillShow:(NSNotification *)notification {
[[self scrollView] setContentInset:UIEdgeInsetsMake([[self scrollView] contentInset].top, 0.0f, [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height, 0.0f)];
}
Um dies zu ändern, dachte ich den Boden auf einen besser geeigneten Wert zu ändern würde den Trick tun, aber wenn ich dies tun, wird die Ansicht blättern nicht auf die UITextField mehr, wenn ich es drücke. Ich kann das Feld jedoch manuell scrollen. Die Art, wie ich dieses Ziel erreichte, wird mit dem folgenden:
- (void)keyboardWillShow:(NSNotification *)notification {
float keyboard = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
float offset = [[[[self contentView] subviews] lastObject] frame].size.height + [[[[self contentView] subviews] lastObject] frame].origin.y + 30.0f;
if ([[self contentView] frame].size.height - [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height < offset) {
[[self scrollView] setContentInset:UIEdgeInsetsMake([[self scrollView] contentInset].top, 0.0f, offset - ([[self view] frame].size.height - keyboard), 0.0f)];
}
}
Wer weiß, wie ich den leeren Raum unter dem UITextFields ignorieren kann beim Scrollen, aber erlaubt, die Scrollview auf den ausgewählten UITextField blättern. Ich habe versucht, die Methode scrollRectToVisible zu verwenden, aber das tut nichts.
Verwenden Sie https://github.com/michaeltyson/TPKeyboardAviiding Bibliothek, super einfach. Stellen Sie TPKeyboardAvoidingScrollView als benutzerdefinierte Klasse Ihrer Bildlaufansicht ein, es kümmert sich um alle Dinge, die Sie verwalten müssen, wenn die Tastatur angezeigt wird. –
Danke für die Bibliothek, aber gibt es einen Weg, es ohne die Bibliothek zu tun? Ich habe versucht, den Code zu verwenden, und der Scrollview wird zum Eingabefeld scrollen, aber der Scrollview springt hoch und scrollt von oben, wenn ich den Code aus der Bibliothek verwende. – Sietse