Domanda

Ho un UIView come Springboard di iPhone. Ho creato utilizzando un UIScrollView e UIButtons. Voglio disattivare lo scorrimento orizzontale su detto ScrollView. Voglio solo lo scorrimento verticale. Come posso realizzare questo?

È stato utile?

Soluzione

È necessario impostare la proprietà del contentSize UIScrollView. Ad esempio, se il <=> è di 320 pixel di larghezza (la larghezza dello schermo), allora si potrebbe fare questo:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

Il <=> sarà quindi solo di scorrimento in verticale, perché può già visualizzare tutto in orizzontale.

Altri suggerimenti

AGGIORNAMENTO: (Dopo @EranMarom ha sottolineato il suo commento)

È possibile interrompere lo scorrimento orizzontale o lo scorrimento verticale nel metodo ScrollViewDelegate. Ecco come,

Interrompe lo scorrimento orizzontale:

Se si desidera scorrere in orizzontale, allora avete bisogno di aumentare la contentOffset.x. Prevenire che arresta il rotolo ScrollView in direzione orizzontale.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

Interrompe Scorrimento verticale:

Se si desidera scorrere in senso verticale, allora avete bisogno di aumentare la contentOffset.y. Prevenire che arresta il rotolo ScrollView in direzione verticale.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

Sopra codice impedisce i cambiamenti in x e y di un scrollview contentOffset e porta per fermare lo scorrimento in scrollViewDidScroll: metodo.

Poiché l'uso iOS7

self.automaticallyAdjustsScrollViewInsets = NO;

// e crearvi pagina di scorrimento con 3 pagine

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];
  

soluzione Swift

Creare due punti vendita, uno per la visualizzazione e uno per la visualizzazione di scorrimento:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

Poi, nel tuo viewDidLayoutSubviews è possibile aggiungere il seguente codice:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

Quello che abbiamo fatto è raccolto l'altezza e la larghezza della vista e impostare la dimensione dei contenuti scrollViews di abbinarlo. Questo fermerà il tuo ScrollView da scorrimento orizzontale.


più pensieri:

CGSizeMake prende un'altezza di larghezza e con CGFloats. Potrebbe essere necessario utilizzare l'UIScrollViews altezza esistente per il secondo parametro. Il che sarebbe simile a questa:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)

È possibile selezionare la vista, poi sotto Attributes Inspector deselezionare User Interaction Enabled.

Nel mio caso la larghezza della contentView era maggiore della larghezza di UIScrollView e che è stato il motivo per lo scorrimento orizzontale indesiderati. Ho risolto impostando la larghezza di contentView uguale alla larghezza del UIScrollView.

La speranza che aiuta qualcuno

Nel mio caso, con Swift 4.2 è possibile utilizzare:

Disattiva scorrimento verticale:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = 0.0
}

Disattiva scorrimento orizzontale:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0.0
}

Una volta che ho fatto la sostituzione del UIScrollView con un UITableView con solo 1 delle cellule, ha funzionato bene.

Ho avuto la Tableview contentInset trova in viewDidLoad (come sotto) che ciò che provoca lo scorrimento orizzontale

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

Controlla se ci sono Tableview contentInset impostato per motivi diversi e disattivarlo

Ho lottato con questo per un po 'di tempo a cercare, senza successo, le varie proposte in questo e in altri thread.

Tuttavia, in un altro thread (non so dove) Qualcuno ha suggerito che l'uso di un vincolo negativo sul UIScrollView lavorato per lui.

Così ho provato varie combinazioni di vincoli con risultati inconsistenti. Quello che alla fine ha funzionato per me è stato quello di aggiungere iniziali e finali dei vincoli di -32 al ScrollView e aggiungere un TextView (invisibile) con una larghezza di 320 (e centrato).

Prova questo:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];

Utilizzare questa singola linea.

self.automaticallyAdjustsScrollViewInsets = NO;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top