Sembra un errore o solo uno stato predefinito non ideale. Ma in base al codice nel progetto di test, qualcosa di simile al sotto potrebbe funzionare dopo un tuning più preciso.
Ci sono due problemi con il codice di esempio, uno è che non si sta facendo nulla sulla dimensione del testo quando appare la tastiera, quindi non è possibile utilizzare o vedere il testo sotto la tastiera. Esistono altre soluzioni, ma una soluzione rapida e sporca consiste nel modificare le dimensioni del fotogramma (in un'app di sottomissione, prenderei anche le informazioni sull'animazione e animare il cambio del fotogramma di visualizzazione in modo che corrisponda all'animazione della tastiera che va oltre lo scopo di questa domanda). Lo fai in 'willShow' o simili, e lo riporti in 'didHide' o simili.
Quindi, l'offset del contenuto viene scartato quando è nascosto e sembra che ci siano stati strani stati mentre lo si trascina fuori dallo schermo prima e intorno ai callback per nascondere e scorrere le modifiche. Ho appena salvato lo stato e lo "aggiusto" una volta che la tastiera scompare e ho aggiornato la visualizzazione del testo.
Ho creato alcune proprietà e una presa nello storyboard per fondere la visualizzazione del testo.
- (void) viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
}
- (void) keyboardWillShow:(NSNotification *)notification
{
NSDictionary * info = [notification userInfo];
CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect rect = self.textView.frame;
rect.size.height -= size.height;
self.textView.frame = rect;
}
- (void)keyboardDidHide:(NSNotification *)notification
{
NSLog(@"====== keyboardDidHide =======");
NSDictionary * info = [notification userInfo];
CGSize size = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGRect rect = self.textView.frame;
rect.size.height += size.height;
self.textView.frame = rect;
self.hidingKeyboard = YES;
}
- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"%f", scrollView.contentOffset.y);
if(self.hidingKeyboard == YES)
{
scrollView.contentOffset = self.lastOffset;
self.hidingKeyboard = NO;
NSLog(@"====== reset =======");
}
else
self.lastOffset = scrollView.contentOffset;
}
sto cercando di riprodurre. Ho aggiunto una vista testuale su una finestra e ho un testo lungo. Ho impostato la modalità di rimozione della tastiera su interattiva. Ho aggiunto un'implementazione di 'scrollViewDidScroll:' per catturare strani salti. Funziona come previsto. Potresti per favore approfondire il tuo caso d'uso? –
Ho pubblicato il mio progetto di esempio qui: http://cl.ly/013q0t022j0l. Il progetto è una singola visualizzazione di testo in uno storyboard con un testo di lorem ipsum. I registri del controller della vista per la tastiera hanno nascosto la notifica ed è anche il delegato della visualizzazione del testo. Sto registrando la notifica hide not e la posizione y dell'offset del contenuto quando scorre la vista scroll. – Dino
Se si esegue il progetto e si chiude la tastiera, verranno visualizzati alcuni numeri piuttosto irregolari provenienti dal metodo scrollViewDidScroll dopo l'attivazione della notifica hide. – Dino