Новые методы NSLayoutConstraint
activateConstraints:
и deactivateConstraints:
не работают корректно с ограничениями, создаваемыми IB (они корректно работают для ограничений, созданных кодом). Я создал простое тестовое приложение с одной кнопкой, которая имеет два набора ограничений. Один установленный набор имеет ограничения по центру и центру, а другой набор, который удаляется, имеет верхние и левые ограничения (константа 10). Метод кнопки переключает эти наборы ограничений. Вот код,
@interface ViewController ()
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *uninstalledConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *installedConstraints;
@end
@implementation ViewController
- (IBAction)switchconstraints:(UIButton *)sender {
[NSLayoutConstraint deactivateConstraints:self.installedConstraints];
[NSLayoutConstraint activateConstraints:self.uninstalledConstraints];
}
-(void)viewWillLayoutSubviews {
NSLog(@"installed: %@ uninstalled: %@", ((NSLayoutConstraint *)self.installedConstraints[0]).active ? @"Active" : @"Inactive", ((NSLayoutConstraint *)self.uninstalledConstraints[0]).active ? @"Active" : @"Inactive");
}
Когда приложение запускается, кнопка находится в правильном, центрированном положении, определяемом установленными ограничениями. После того, как я активирую/инактивацию в методе действия кнопки, кнопка вернется в новое положение правильно, но когда я поворачиваю представление в альбомную, он возвращается в свое первоначально определенное положение (хотя в журнале все еще отображается вновь активированный набор как будучи активным). Когда я поворачиваюсь назад к портрету, кнопка остается в исходном положении (в центре экрана), и теперь журнал показывает, что начальный набор ограничений как активный, и те, которые я активировал, как неактивные.
Вопрос в том, является ли это ошибкой или эти методы не должны работать таким образом с определенными ограничениями IB?