У меня есть это представление, которое имело autoresizingMask = UIViewAutoresizingFlexibleHeight
Когда строка состояния будет анимировать ее высоту (например, при подвешивании телефонного звонка), высота представления будет оживлять и увеличиваться.
Но с автоматической компоновкой я заменяю этот autoresizingMask на ограничения:
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)]];
Но теперь изменение моего макета не анимируется в строке состояния, оно просто изменилось без анимации.
Теперь я знаю, что я должен называть -layoutIfNeeded в блоке анимации при использовании компоновки на основе ограничений. Но здесь я не тот, кто создает блок анимации! Так есть способ оживить изменение?
Означает ли это, что мне нужно найти место в моем коде, которое будет выполняться во время этого блока анимации, который я не инициировал? Я попытался установить [self.view layoutIfNeeded] в моем контроллере, когда UIApplicationWillChangeStatusBarFrameNotification
запущен, но он не работает.