2012-09-24 11 views
5

sto aggiungendo uno ScrollView fittizio per la mia app per rilevare un utente fa clic sulla barra di stato, a Performa un evento nel mio programma .. sto creando nel viewDidLoad:iOS6 ScrollBarShouldScrollToTop non sparare/problema ScrollView Delegato

//Dummy Scroll is for the tap on status bar to work 

UIScrollView *dummyScrollView = [[UIScrollView alloc] init]; 
dummyScrollView.delegate = self; 
[[self view ] addSubview:dummyScrollView]; 
[[self view] sendSubviewToBack:dummyScrollView]; 

ho quindi implementare:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView 
{ 

NSLog(@"scrollViewShouldScrollToTop"); 
. 
. 
} 

in tutte le precedenti versioni di iOS questo ha lavorato splendidamente e senza problemi, eppure sotto iOS 6 lo scrollViewShouldScrollToTop non viene mai chiamato. È un insetto?? L'API dice che questo dovrebbe essere ancora disponibile come parte del delegato in iOS6, eppure con iOS6 su dispositivo e simulatore non viene mai eseguito ... Qualcuno ha idea di cosa sta succedendo?

Ancora nessun altro TableView o ScrollView, ma c'è un MAPVIEW ?? Ma il MapView non ha un shouldScrollToTop che posso trovare per impostare NO .. quindi sono ancora oltre confuso perché questo smesso di funzionare sotto iOS 6 ...

risposta

0

Su iOS 6, toccare solo la parte sopra a scorrimento della barra di stato può attivare l'evento scrollsToTop.

E, quella scrollView non può essere nascosta o 0 alfa.

Ma può essere coperto. o chiaro il colore di sfondo.

Così su iOS 6, è necessario

dummyScrollView.frame = self.view.bounds; 
dummyScrollView.backgroundColor = [UIColor clearColor]; 
5

C'è qualche possibilità che l'UIScrollView che stai creando non è in qualche modo l'unico UIScrollView nella tua gerarchia di vista? Sembra in iOS6, se hai più di un singolo UIScrollView nella tua gerarchia di visualizzazione, solo uno dovrebbe avere scrollsToTop = YES. Questo è quello che avrà il suo metodo scrollViewShouldScrollToTop chiamato.

Il mio problema era simile a che ho avuto un molto UITableView di base che non avrebbe più scorrimento automatico verso l'alto quando la barra di stato è stato sfruttato. Alla fine ho ricordato che una delle celle nella mia tabellaView utilizza UIWebView e che la cella webView.scrollView era (correttamente, ora in iOS6) dirottando la chiamata a scrollViewShouldScrollToTop che, prima di iOS6, veniva eseguita sul mio tableView.

Dopo aver impostato "scrollsToTop = NO" di TableViewCell, lo scorrimento automatico della barra di stato ha funzionato nuovamente come prima. Ecco più o meno come appare il codice:

myCustomCellWithAWebView.webView.scrollView.scrollsToTop = NO; 

Spero che questo aiuti!

+1

FYI, questo non è un nuovo comportamento in iOS6 - è stato intorno a un lungo periodo di tempo. Vedi http://stackoverflow.com/questions/4167806/automatic-scroll-to-top-doesnt-work-in-uitableview/5557900#5557900 –

+0

Non ci sono altre visualizzazioni di scorrimento nella mia app, oltre a quella nascosta usata per attiva il clic sulla barra di stato per attivare l'evento. – user282172

+0

Cosa succede se non lo mandi sul retro? Funziona se lo lasci in cima? Se è così, lascialo in cima e imposta l'alfa su 0 o posizionalo fuori dallo schermo, forse. –