2013-08-25 19 views
5

Mam UIScrollView, który jest skonfigurowany w metodzie viewDidLoad z UIViewController (będę to nazywać ScrollViewController). Widok przewijania zawiera strony o treści poziomej (podobne do natywnej aplikacji pogodowej).Jak przewinąć UIScrollView pod obciążeniem podczas korzystania z automatycznego układu

Podczas wyświetlania przewijania powinna istnieć możliwość wybrania strony, na której się zaczyna. Mój wzór jest następujący:

  • init a ScrollViewController. Tutaj nic się nie dzieje. Właściwość currentPage jest domyślnie ustawiona na 0.
  • ustaw scrollViewController.currentPage na żądany numer strony.
  • w viewDidLoad z ScrollViewController, przeczytaj self.currentPage i użyj scrollToRect lub setContentOffset, aby przewinąć odpowiednio.

Implementacja przewijania wydaje się być w porządku, ponieważ używam tego samego kodu w innym miejscu, aby przejść do niektórych stron. Ale przy pierwszym załadowaniu nic się nie dzieje (to znaczy widok przewijania nie jest przewijany do żądanej strony).

myślę Znalazłem przyczynę - wydaje się, że contentSize zdania przewijania (który jest osiągany przez autoLayout pamiętam) jest 0 podczas viewDidLoad, a to wydaje się, że to zapobiega przewijanie. Jest również zero podczas viewWillAppear. Tylko w trybie viewDidAppear przewijanie działa, co oczywiście powoduje dziwne wrażenia użytkownika.

Jak mogę rozwiązać ten problem? Czy mądrze jest jakoś wymusić układ w viewDidLoad? Lub inne podejście?

Odpowiedz

8

viewDidLayoutSubviews jest tym, czego szukasz. Jest to metoda, w której wszystkie ramki subviews są całkowicie zainicjalizowane. Tak więc, spróbuj wywołać metodę konfiguracji scrollView w środku, w swoim widoku Kontroler:

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

Powinieneś być w stanie ustawić rozmiar treści ręcznie. Gdzie wstawiasz strony do widoku przewijania? Sugerowałbym wstawienie ich wewnątrz viewDidLoad lub viewWillAppear, a następnie przewinięcie do żądanej strony zaraz po włożeniu ich przez ustawienie jej contentOffset.

Powiązane problemy