2015-04-12 12 views
6

Używam animacji opartej na UIImageView do wyświetlania wskaźnika niestandardowego działania. Poniższy kod jest odpowiedzialny za ustawienie to:UINavigation Tytuł artykułu Wyświetl animację

+ (void)startLoadingActivity:(UIViewController *)vc { 
    vc.parentViewController.navigationItem.titleView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)]; 
} 

Oto istota z kategorii UIImageView+Animation.

Za każdym razem, gdy uruchamiam żądanie WWW, uruchamiam wskaźnik aktywności, a gdy żądanie zostanie wykonane, zatrzymuję je, ustawiając właściwość titleView na nil.

Rezultat jest taki:

OK

Sposób żądanie jest nazywany również do metody kontrolera widoku -viewDidAppear:.

Jednak zawsze, gdy animacja rozpoczyna się podczas przejścia, wygląda na to, że pozycja UIImageView jest nieprawidłowa.

Poniższy wynik pokazuje problem:

Proszę zauważyć, jak wskaźnik aktywności jest wyświetlana na górze przycisku „Grupy”.

KO

Gdzie jest ten problem bierze? Jak mogę to rozwiązać?

Odpowiedz

0

Myślę, że problem polega na tym, że chociaż ustawienie titleView to nil, nie usuwa się programu ładującego z widoku, więc ramka przechodzi do pozycji (0,0).

Spróbuj wykonać następujące czynności:

+ (void)startLoadingActivity:(UIViewController *)vc { 
    UIImageView *imageView = [UIImageView imageViewWithPath:@"loading_" count:10 duration:1.3 frame:CGRectMake(0, 0, 22, 22)]; 
    imageView.tag = 999; 
    vc.parentViewController.navigationItem.titleView = imageView; 
} 

A gdy ustawienie

titleView = nil 

zrobić także

[[self.navigationController.view viewWithTag:999] removeFromSuperView]; 
+0

Próbowałam i wydaje się, że tak nie jest. Problem występuje po dodaniu modułu ładującego. – thegameg

+0

Edytowałem swoją odpowiedź, aby usunąć ją z kontrolera nawigacyjnego. Czy to pomaga? – Asaf

+0

Nie, nic nie zmieniło. Dzięki i tak. – thegameg

0

To pytanie jest naprawdę ładny demo tej kwestii, a odpowiedzi są tutaj : Stackoverflow title moves while push/pop of viewcontroller

Krótko mówiąc:

  1. Zastosowanie UIView z .autoresizingMask = UIViewAutoresizingFlexibleTopMargin
  2. Nie rób tego w "viewWillAppear:" (zrobić w viewDidLoad/aktualizacja w DidAppear lub później)
Powiązane problemy