2010-04-23 12 views
6

La mia app ha un UITableView. UITableView ha una vista di intestazione, che è un UIWebView.UITableView, UIWebViews e la proprietà scrollsToTop = Problema

Per impostazione predefinita, le viste di scorrimento hanno la loro proprietà scrollsToTop impostata su YES, che consente all'utente di toccare la barra di stato per scorrere fino alla parte superiore della vista di scorrimento.

Quando ci sono due viste di scorrimento incorporate in una vista, entrambe hanno la loro proprietà scrollsToTop impostata su YES, toccando la barra di stato non fa nulla.

La soluzione è impostare una delle proprietà scrollsToTop su NO. Ciò riabilita toccando la barra di stato.

Ora questo è il problema: UIWebView non espone la sua vista di scorrimento e, di conseguenza, non c'è accesso alla proprietà scrollsToTop. Voglio solo che la vista tabella scorra verso l'alto quando viene toccata la barra di stato, non la vista Web.

Qualcuno sa come posso ottenere questo?

risposta

3

ora c'è una proprietà ScrollView, che viene preferito:

myWebView.scrollView.scrollsToTop = YES; 
0

Hai provato il metodo delegate da UIScrollViewDelegate scrollViewShouldScrollToTop?

+0

Non sembra funzionare. Inizialmente ho provato ad implementare questo metodo insieme ai metodi UIWebViewDelegate, ma non pensavo che avrebbe funzionato perché la visualizzazione web stessa è delegata alla vista di scorrimento, piuttosto che il delegato della vista Web. Quindi ho creato una sottoclasse di UIWebView e implementato, ma ancora senza fortuna. Non sembra funzionare. – Jasarien

+0

Ulteriori approfondimenti: sembra che UIWebView non risponda ai metodi delegate della vista a scorrimento. Forse qualche altro oggetto interno è delegato alla vista di scorrimento? – Jasarien

3

Questa domanda contiene la risposta:

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

non ho potuto trovare in precedenza da quando è stato chiesto in modo diverso e su un argomento leggermente diverso, ma il risultato è lo stesso.

Quindi il risultato è stato quello di passare attraverso le sottoviste fino a trovare la vista di scorrimento. L'ho già fatto in altre app e non ci ho pensato in questo caso. Dovrebbe essere App-Store-Safe, perché ho app sul negozio che usano questa idea.

una categoria a UIWebView per abilitare o disabilitare lo scorrimento verso l'alto:

@implementation UIWebView (UIWebViewScrollToTopAdditions) 

- (void)setScrollsToTop:(BOOL)scrollsToTop 
{ 
    if ([[self subviews] count] > 0) 
    { 
     UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0]; 
     if ([scrollView respondsToSelector:@selector(setScrollsToTop:)]) 
     { 
      [scrollView setScrollsToTop:scrollsToTop]; 
     } 
    } 
} 

@end 
2

Questo accade spesso perché tutti scrollviews hanno un valore predefinito . Quando vengono create nuove visualizzazioni di scorrimento o visualizzazioni Web, avranno scrollsToTop impostato su SÌ. Ho scritto una categoria semplice per questo problema specifico:

-[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap]; 

https://gist.github.com/hfossli/6776203

Si stabilisce fondamentalmente scrollsToTop a NO su tutti gli altri scrollViews di quello che si sta specificando + curando il valore predefinito. In bocca al lupo!

+1

Questa è stata l'unica cosa che ha funzionato per me. Dovrei avere più voti positivi secondo me. Grazie per questo. –

+1

Funziona perfettamente! – Legnus

Problemi correlati