2013-03-20 10 views
10

mam ten pogląd, że użyte do autoresizingMask = UIViewAutoresizingFlexibleHeightOgraniczenia układ oparty bierne gdy wysokość pasek stanu zmienia się na iOS

Kiedy pasek stanu będzie animować jego wysokość (jak podczas zawieszania rozmowy telefonicznej), wysokość widoku za animowałby i zwiększał.

Ale z układem automatycznego jestem zastąpienie tego autoresizingMask z ograniczeniami:

UIView *orangeView = [[UIView alloc] initWithFrame:CGRectZero]; 
orangeView.translatesAutoresizingMaskIntoConstraints = NO; 
orangeView.backgroundColor = [UIColor orangeColor]; 

[self.view addSubview:orangeView]; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[orangeView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(orangeView)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(40)-[orangeView]-(190)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(orangeView)]]; 

Teraz jednak zmiana w moim układzie nie jest animowana z paska stanu, to jest po prostu zmienić bez żadnej animacji.

Teraz wiem, że powinienem wywołać -layoutIfNeeded w bloku animacji podczas korzystania z układu opartego na ograniczeniach. Ale tutaj nie jestem tym, który tworzy blok animacji! Czy istnieje sposób na ożywienie zmiany?

Czy to oznacza, że ​​muszę znaleźć miejsce w moim kodzie, które zostanie wykonane podczas tego bloku animacji, którego nie zainicjowałem? Próbowałem ustawić [self.view layoutIfNeeded] w moim kontrolerze po uruchomieniu UIApplicationWillChangeStatusBarFrameNotification, ale to nie działa.

+0

Czy kiedykolwiek rozwiązałeś ten problem? – AnthonyM

Odpowiedz

2

Pamiętaj, aby dodać ograniczenia w metodzie updateConstraints.

Oto co docs powiedzieć:

Widoki niestandardowe że ustanowione ograniczenia sami powinniśmy zrobić poprzez nadpisanie tej metody. Gdy niestandardowy widok zauważy, że zmiana została dokonana w widoku, który unieważnia jedno z jego ograniczeń, powinien natychmiast usunąć to ograniczenie, a następnie wywołać setNeedsUpdateConstraints, aby zauważyć, że ograniczenia muszą zostać zaktualizowane.

Powiązane problemy