Hi!
Für einige (viele?) von Euch mag das nachfolgende Posting trivial sein, dann ignoriert es einfach. Vielleicht hilft es aber auch dem ein oder anderen...
Ich bin gestern über den Effekt gestolpert, dass unter iOS 7 die Tastatur Teile einer bildschirmfüllenden UITextView überlagert. Gut, das ist nicht sehr überraschend (eigentlich sogar logisch) und kurzes Googlen ergab, dass ich (1.) in guter Gesellschaft bin und (2.) neben verschiedenen, teilweise recht kruden, Lösungsansätzen auf StackOverflow auch eine Apple-Lösung existiert.
Diese war schnell implementiert und siehe da: Nun zeigte meine UITextView genau das Verhalten, das mich seit Erscheinen von iOS 7 z. B. in Mail massiv nervt: Zwar kann ich nach Einblenden der Tastatur den Text sauber scrollen und so auch Teile, die hinter der Tastatur lägen, bearbeiten. Aber habt Ihr schon einmal versucht, einen längeren Text zu markieren, so dass Ihr die Markierung bis an den Rand der Tastatur (und darüber hinaus) ziehen müsstet: Richtig, die UITextView fängt nicht an zu (auto-) scrollen und man kann den Text nur extrem umständlich markieren.
Ich habe also statt der Insets die Frame-Größe verändert (und dabei noch die unterschiedliche Tastatur-Größe je nach Orientierung berücksichtigt) und bin mit der Lösung recht zufrieden: Sie macht, was ich erwarte und ist recht übersichtlich. Allerdings habe ich auf ein Scrollen zur aktuellen Einfügemarke / markierten Bereich verzichtet:
Alles anzeigen
Komisch, dass Apple so etwas als "Musterlösung" präsentiert (aber konsequent, dass ein Fehlverhalten dann auch deren Apps auftritt). Oder habe ich etwas übersehen?
Ciao, Mattes
Für einige (viele?) von Euch mag das nachfolgende Posting trivial sein, dann ignoriert es einfach. Vielleicht hilft es aber auch dem ein oder anderen...
Ich bin gestern über den Effekt gestolpert, dass unter iOS 7 die Tastatur Teile einer bildschirmfüllenden UITextView überlagert. Gut, das ist nicht sehr überraschend (eigentlich sogar logisch) und kurzes Googlen ergab, dass ich (1.) in guter Gesellschaft bin und (2.) neben verschiedenen, teilweise recht kruden, Lösungsansätzen auf StackOverflow auch eine Apple-Lösung existiert.
Diese war schnell implementiert und siehe da: Nun zeigte meine UITextView genau das Verhalten, das mich seit Erscheinen von iOS 7 z. B. in Mail massiv nervt: Zwar kann ich nach Einblenden der Tastatur den Text sauber scrollen und so auch Teile, die hinter der Tastatur lägen, bearbeiten. Aber habt Ihr schon einmal versucht, einen längeren Text zu markieren, so dass Ihr die Markierung bis an den Rand der Tastatur (und darüber hinaus) ziehen müsstet: Richtig, die UITextView fängt nicht an zu (auto-) scrollen und man kann den Text nur extrem umständlich markieren.
Ich habe also statt der Insets die Frame-Größe verändert (und dabei noch die unterschiedliche Tastatur-Größe je nach Orientierung berücksichtigt) und bin mit der Lösung recht zufrieden: Sie macht, was ich erwarte und ist recht übersichtlich. Allerdings habe ich auf ein Scrollen zur aktuellen Einfügemarke / markierten Bereich verzichtet:
Quellcode
- - (void)viewDidLoad
- {
- NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
- [nc addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
- [nc addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
- ...
- }
- - (void)keyboardWasShown:(NSNotification*)aNotification
- {
- // Adjust the view size as the textview would extend under the a shown keyboard, affecting proper scrolling and text selection
- NSDictionary* info = [aNotification userInfo];
- CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
- UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
- CGFloat kbHeight = (interfaceOrientation == UIInterfaceOrientationPortrait) ? kbSize.height : kbSize.width;
- // Apple's solution changes the view's insets, still breaking the selection of text behind the keyboard
- CGRect frame = self.view.frame;
- frame.size.height -= kbHeight;
- self.view.frame = frame;
- }
- - (void)keyboardWillBeHidden:(NSNotification*)aNotification
- {
- // Reset the view size
- NSDictionary* info = [aNotification userInfo];
- CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
- UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;
- CGFloat kbHeight = (interfaceOrientation == UIInterfaceOrientationPortrait) ? kbSize.height : kbSize.width;
- CGRect frame = self.view.frame;
- frame.size.height += kbHeight;
- self.view.frame = frame;
- }
Komisch, dass Apple so etwas als "Musterlösung" präsentiert (aber konsequent, dass ein Fehlverhalten dann auch deren Apps auftritt). Oder habe ich etwas übersehen?
Ciao, Mattes
Diese Seite bleibt aus technischen Gründen unbedruckt.