Ich habe diese Ansicht, die autoresizingMask = UIViewAutoresizingFlexibleHeight
Constraints basierte Layout nicht animiert, wenn die Statusleiste Höhe auf iOS ändert
Wenn die Statusleiste verwendet haben würde seine Höhe animieren (wie wenn ein Anruf auflegt), die Höhe der Ansicht würde animieren und erhöhen.
Aber mit Auto-Layout bin ersetzen ich dieses autoresizingMask mit Einschränkungen:
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)]];
Aber jetzt wird die Veränderung in meinem Layout nicht mit der Statusleiste animiert, es ist nur ohne Animationen verändert.
Jetzt weiß ich, dass ich -layoutIfNeeded in einem Animationsblock aufrufen sollte, wenn Sie Constraints-basierte Layout verwenden. Aber hier bin ich nicht derjenige, der den Animationsblock erstellt! Gibt es also einen Weg, die Veränderung zu animieren?
Bedeutet das, dass ich einen Platz in meinem Code finden muss, der während dieses nicht initiierten Animationsblocks ausgeführt würde? Ich habe versucht, [self.view layoutIfNeeded] in meinem Controller zu setzen, wenn die UIApplicationWillChangeStatusBarFrameNotification
ausgelöst wird, aber es funktioniert nicht.
Haben Sie dieses Problem jemals gelöst? – AnthonyM