2015-09-11 4 views
18

Voglio creare la vista con solo scorrimento verticale. Come si è scoperto è epico difficile da fare in iOs. Ho eseguito questa procedura:Disabilita lo scorrimento orizzontale in UIScrollView con l'autolayout

1) Creare UIViewController nello storyboard;

2) Aggiungi ScrollView in Visualizza in UIViewController e aggiungi 0 vincoli su ciascun lato.

3) Aggiungere elementi in ScrollView, come risultato: enter image description here

Dopo lancio il mio app tutte le opere, ma:

1) Come devo disattivare scorrimento orizzontale? Aggiungo 0 vincolo a destra al mio scrollView + 0 vincolo a destra al mio uilabel (come vedi sullo schermo per alcuni motivi non è collegato a destra, ha un vincolo diverso, ma nella proprietà ho impostato vincolo = 0) e, come pensavo, il testo dell'etichetta doveva essere nei limiti del mio schermo, ma quando lancio l'app posso scorrere a destra, cioè il testo uilable non si è concluso, la mia scrollview si ridimensiona per adattarsi al testo. Ho provato a impostare scrollView nel codice: scrollView.contentSize = CGSize(UIScreen.mainScreen().bounds.width, height: 800), ma non ha aiutato.

2) Se si scorre molto, viene visualizzato uno spazio vuoto e questo non è bello, come risolverlo?

+0

Ho appena risposto a una domanda molto simile qui: http: // StackOverflow.it/a/32531753/958017 – lucaslt89

risposta

46

1) Lo scorrimento orizzontale si attiva automaticamente quando la larghezza del contenuto in scroll visualizza più della larghezza di scrollView. Pertanto, per evitare lo scrolling orizzontale è necessario rendere la larghezza del contenuto all'interno di scrollView inferiore o uguale a scrollView width.

Leading space e trailing space non è possibile impostare larghezza specifica per le viste, ma semplicemente allungarle. Nelle viste normali, non si estendono per una larghezza maggiore della vista, ma scrollView è una vista speciale, in realtà, con una larghezza di contenuto infinita. Pertanto, i limiti trailing space e leading space in scrollView modificano la larghezza delle viste ai loro valori massimi possibili (nel caso in cui con UILabel è possibile visualizzare il ridimensionamento per adattarlo al testo).

Per evitare lo scorrimento orizzontale, è necessario impostare la larghezza specifica di ciascuna vista, minore o uguale a scrollVisione larghezza. La larghezza specifica delle viste può essere impostata con width constraints.

Invece di impostare ogni larghezza di visualizzazione, è molto meglio aggiungere un contenitore di viste e impostare la larghezza su di esso, e al suo interno posizionare le viste secondo necessità.

Visualizzazioni gerarchia:

View 
    -> ScrollView 
     -> ContainerView 
      -> UILabel 
      -> UILabel 
      -> ... other views that you need 

autoLayout vincoli:

ScrollView 
    -> leading space to View : 0 
    -> trailing space to View : 0 
    -> top space to View : 0 
    -> bottom space to View : 0 

Container View 
    -> leading space to ScrollView : 0 
    -> trailing space to ScrollView : 0 
    -> top space to ScrollView : 0 
    -> bottom space to ScrollView : 0 
    -> width equal to ScrollView : 0 

Per impostare width equal constraint Ctrl + trascina containerView-scrollView.

width equal constraint

2) di scorrimento verticale dipende l'altezza totale del contenuto. Lo spazio vuoto può essere, se l'ultimo elemento all'interno di containerView ha un valore elevato di bottom space to superview.

O vuoi dire effetto di rimbalzo? È possibile disabilitare il rimbalzo verticale di scrollView.

+0

Questa era una soluzione eccellente. A differenza della maggior parte delle altre soluzioni, questo può essere fatto solo nel builder dell'interfaccia, senza necessità di impostare manualmente contentSize nel codice. – Houman

+0

Grazie, ma tutto il mio controllo non risponde. Campo di testo e pulsanti non sono selezionabili. – Parimal