mam ten pogląd, że użyte do autoresizingMask = UIViewAutoresizingFlexibleHeight
Ograniczenia 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.
Czy kiedykolwiek rozwiązałeś ten problem? – AnthonyM