2008-10-06 4 views
11

Ho un UIScrollView che mostra i dati verticali, ma dove il componente orizzontale non è più largo dello schermo di iPhone. Il problema è che l'utente è ancora in grado di trascinare orizzontalmente e fondamentalmente esporre sezioni vuote dell'interfaccia utente. Ho provato a installare:Come posso impedire a UIScrollView di rimbalzare orizzontalmente?

scrollView.alwaysBounceHorizontal = NO; 
scrollView.directionalLockEnabled = YES; 

che aiuta un po ', ma ancora non si ferma l'utente di essere in grado di trascinare in senso orizzontale. Sicuramente c'è un modo per sistemarlo facilmente?

risposta

14

Questo è strano, perché ogni volta che creo una vista di scorrimento con dimensioni di cornice e contenuto entro i limiti dello schermo su entrambe le dimensioni, la vista di scorrimento non scorre (o rimbalza) in quella direzione.

// Should scroll vertically but not horizontally 
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
scrollView.contentSize = CGSizeMake(320, 1000); 

Sei sicuro il telaio si adatta completamente all'interno dello schermo e la larghezza di contentSize non è superiore alla larghezza della vista di scorrimento?

+0

Ho avuto la scrollView.contentSize sbagliata ... grazie! – rustyshelf

6

Provare a impostare scrollView.bounces su NO e scrollView.alwaysBounceVertical su YES.

+2

Questo è a metà strada, ora scorre in verticale, ma mai orizzontalmente, ma non rimbalza più verticalmente ... sarebbe bello se potesse ancora rimbalzare verticalmente, poiché sembra poco naturale scorrere senza quel rimbalzo sull'iPhone. – rustyshelf

+0

@rustyshelf So che è un po 'tardi, ma oltre alla risposta di Darron, eseguiamo anche scrollView. directionalLockEnabled = YES' – hyd00

1

Verificare che il contenuto di UIScrollView non sia più ampio di UIScrollView. Nelle mie app questo è stato sufficiente per evitare lo scorrimento orizzontale, tranne nei casi in cui sono diventato davvero pazzo scorrere in direzioni casuali (ad esempio, avviare una scroll mentre la vista stava ancora rallentando).

1

Qualcosa da tenere a mente: Tu sai che non c'è nulla di più da vedere in orizzontale, ma i tuoi utenti lo sapranno? Potresti volere un piccolo rimbalzo orizzontale, anche se non ci sono contenuti extra da mostrare orizzontalmente. Questo fa sapere all'utente che i loro tentativi di scorrere in orizzontale non vengono ignorati, non c'è proprio niente da vedere. Ma, sì, spesso non vuoi davvero il rimbalzo.

0

La mia versione per visualizzazioni, una soluzione comune:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 

[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)]; 

} 
2

o meno di una vista rotoli (e rimbalzi) dipende in orizzontale su tre cose:

  • Le dimensioni contenuti
  • La sinistra e destra contenuto
  • La larghezza della visualizzazione di scorrimento -

Se la visualizzazione di scorrimento può adattarsi alla dimensione del contenuto più i margini, non scorre o rimbalza.

evitare di rimbalzare orizzontale in questo modo:

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height); 

sto aggiungendo questa risposta perché i precedenti non hanno preso in considerazione contentInset.

6

La casella di controllo per il rimbalzo verticalmente in storyboard-ScrollView può semplicemente aiutare ...

enter image description here

17
scrollView.bounces = NO; 

lavorato per me.

0

Se qualcuno sta sviluppando per OS X sta guardando qui, come di OS X 10.7, la soluzione è quella di impostare la proprietà horizontalScrollElasticity-false/NO sulla vista di scorrimento, in questo modo:

Swift:

scrollView.horizontalScrollElasticity = false 

Objective-C:

scrollView.horizontalScrollElasticity = NO 
4

che funziona per me in Swift:

scrollView.alwaysBounceHorizontal = false 
scrollView.bounces = false