2014-04-12 10 views
9

uczyłem układ auto z animacjami z samouczkaAuto Układ zmiana ograniczenie nie animować

http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was

i rzeczy działały idealnie.

Kiedy próbowałem użyć tego pojęcia w mojej aplikacji, starając się ożywić ekran ustawień (UIView) od dołu do góry, to działa świetnie, gdy ekran ustawień jest tylko pusty UIView,

Jednak w przypadku Dodaję UILabel jako subview do tego ekranu ustawień, animacja po prostu znika. Po usunięciu tego formularza UILabel z ekranu ustawień animacja jest widoczna.

Oto wyloty że mam podłączone

__weak IBOutlet UIView *settingsView; 
__weak IBOutlet NSLayoutConstraint *settingsBottomConstraint; 
__weak IBOutlet NSLayoutConstraint *settingsViewHeightConstraint; 

View nie metodę konfiguracji obciążenia (setupViews)

-(void)setupViews 
{ 
    settingsBottomConstraint.constant = - settingsViewHeightConstraint.constant; 
    [settingsView setNeedsUpdateConstraints]; 
    [settingsView layoutIfNeeded]; 
    isSettingsHidden = YES; 
} 

Ukryj/Metoda Unhide

- (IBAction)showSettingsScreen:(id)sender { 

    if (isSettingsHidden) { 

     settingsBottomConstraint.constant = 0; 
     [settingsView setNeedsUpdateConstraints]; 
     [UIView animateWithDuration:.3 animations:^{ 
      [settingsView layoutIfNeeded]; 
     }]; 
    } 
    else{ 

     settingsBottomConstraint.constant = - settingsViewHeightConstraint.constant; 
     [settingsView setNeedsUpdateConstraints]; 
     [UIView animateWithDuration:0.3 animations:^{ 
      [settingsView layoutIfNeeded]; 
     }]; 

    } 
    isSettingsHidden = !isSettingsHidden; 
} 

Mój problem wydaje się podobny do Issue with UIView Auto Layout Animation

+0

jakie są ograniczenia dotyczące twojego UILabel? –

+0

@Iftekhar, Próbowałem obu opcji. 1. Po prostu upuszczając etykietę do UIView (tj. Bez ograniczeń) i 2. Dodając ograniczenia dla szerokości, wysokości, górnej przestrzeni, aby uzyskać podgląd i prowadząc do podglądu. Żaden nie działał. – BangOperator

Odpowiedz

32

Znalazłem odpowiedź.

Zamiast,

[settingsView layoutIfNeeded]; 

Linia ta wykonana to działało jak uroku,

[self.view layoutIfNeeded]; 

przypuszczam musimy wykonać metodę layoutIfNeeded na widoku macierzystego nie tylko widok staramy się ożywić .

UPDATE: Jak podkreślono w komentarzu przez codyko ta jest wymagana dla iOS, iOS 7 10. W systemie iOS 8 ten problem nie istnieje.

+4

Należy zauważyć, że [settingsView layoutIfNeeded] działa w systemie iOS8, ale NIE w systemie iOS7. W iOS7 należy zamiast tego wywołać [self.view layoutIfNeeded], ale jeśli pracujesz tylko w systemie iOS 8, nie musisz aktualizować wiązań dla całego widoku. – codyko