2013-08-25 7 views
5

Ho un UIScrollView impostato nel metodo viewDidLoad di un UIViewController (lo chiamerò uno ScrollViewController). La vista di scorrimento contiene pagine di contenuto orizzontale (simile all'app meteo nativa).Come scorrere un UIScrollView in caricamento quando si usa il layout automatico

Durante la visualizzazione dello scrollview, dovrebbe essere possibile scegliere in quale pagina iniziare. Il mio schema è questo:

  • init a ScrollViewController. Niente succede molto qui. Una proprietà currentPage è impostata su 0.
  • impostare il numero di pagina desiderato su scrollViewController.currentPage.
  • in viewDidLoad di ScrollViewController, leggere self.currentPage e utilizzare scrollToRect o setContentOffset per scorrere di conseguenza.

L'implementazione di scorrimento sembra soddisfacente, poiché sto utilizzando lo stesso codice altrove per passare a determinate pagine. Ma al primo caricamento, non accade nulla (cioè, la vista di scorrimento non scorre nella pagina desiderata).

Io penso ho trovato la ragione - sembra che il contentSize della vista di scorrimento (che deriva dal layout automatico ricordo) è 0 durante viewDidLoad, e questo sembra che questo impedisce lo scorrimento. È anche zero durante viewWillAppear. Solo nello viewDidAppear funziona lo scorrimento, il che rende ovviamente un'esperienza utente strana.

Come posso risolvere questo? È saggio forzare in qualche modo un layout in viewDidLoad? O qualche altro approccio?

risposta

8

viewDidLayoutSubviews è quello che stai cercando. Questo è il metodo in cui tutti i frame di sottoview sono completamente inizializzati. Quindi, cercare di chiamare il metodo di configurazione del ScrollView al suo interno, nella vostra viewController:

-(void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    [self setupView]; 
} 
0

si dovrebbe essere in grado di impostare manualmente la dimensione del contenuto. Dove inserisci le pagine all'interno della vista di scorrimento? Suggerirei di inserirli all'interno di viewDidLoad o viewWillAppear e quindi di scorrere fino alla pagina desiderata subito dopo averli inseriti impostando il suo contentOffset.