Измените набор NSLayoutConstraint программно позже

Я создаю представление в коде (для этого нет xib или раскадровки) и устанавливаю ограничения в коде, например:

NSDictionary *bindings = NSDictionaryOfVariableBindings(_myView);
_myView = [[UIView alloc] init];
[self.view addSubview:_myView];
_myView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_myView]-0-|" options:0 metrics:nil views:bindings ] ];
[self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_myView(25)]" options:0 metrics:nil views:bindings ] ];

Позже в другом методе я хочу изменить положение _myView и анимировать это изменение.

Моя проблема: каков наилучший/правильный способ изменить установленные ограничения? Я не знаю, как изменить, например. положение X и Y. Например. Я установил оба значения на 0 и хочу изменить X и Y на 50.


person Sebastian    schedule 14.01.2014    source источник


Ответы (1)


Ограничения похожи на любой другой объект, если вы хотите изменить их позже, создайте свойство.

@property (nonatomic, strong) NSLayoutConstraint *centerConstraint;

Затем установите для него конкретное ограничение, добавьте его в представление, и вы сможете удалить и снова добавить его позже.

person nevan king    schedule 14.01.2014
comment
Хорошо, спасибо. Это единственный правильный путь? Когда у меня есть, например. 10 UIViews с 2 ограничениями на представление, которые я хочу изменить, тогда мне нужно определить 20 свойств ограничений... - person Sebastian; 14.01.2014
comment
Вы можете использовать свойство, которое представляет собой массив ограничений, а также добавлять и удалять с помощью -addConstraints: и т. д. Вы можете скрыть добавление в методе и вызвать его. В любом случае, Auto Layout просто многословен. - person nevan king; 14.01.2014