2016-07-04 3 views
0

У меня есть UIView, для которого я установил ограничения в IB. Теперь в коде я хочу сделать некоторую анимацию, добавив некоторые новые ограничения и дезактивируя старые. Сначала я добавить новое ограничение для просмотра, то есть неактивный, например:Добавление неактивных ограничений к существующему UIView

// camera view new constraints 
    self.cameraNewLeftConstraint = [NSLayoutConstraint constraintWithItem:self.cameraView 
                   attribute:NSLayoutAttributeLeading 
                   relatedBy:NSLayoutRelationEqual 
                    toItem:self.smallImageContainerView 
                   attribute:NSLayoutAttributeLeading 
                   multiplier:1.0 
                   constant:0]; 
    self.cameraNewLeftConstraint.active = NO; 
    [self.presentationView addConstraint:self.cameraNewLeftConstraint]; 

Но это порождает предупреждение ограничения во время выполнения (stnadard сообщение - будет пытаться сломать некоторые ограничения), что у меня есть противоречивые ограничения, хотя у меня есть добавлено неактивное ограничение. Как я могу справиться с этим, как это должно быть сделано?

ответ

1

Виды не имеют неактивных ограничений. Если вы добавите ограничение в представление, то это ограничение будет активным.

Новый метод установки свойства active на YES добавляет ограничение для правильного представления для вас. В вашем коде, когда вы вызвали addConstraint, iOS добавила ваше ограничение к вашему виду и изменила active на YES.

Итак, не назовите addConstraint на вид. Просто создайте ограничение и установите его свойство active на YES, когда вы хотите его использовать.

+0

Это что-то, что существовало с самого начала, или было добавлено позже, как iOS9 ...? – MegaManX

+0

Свойство 'active' было добавлено в iOS8. Это гораздо лучший способ сделать что-то, потому что вам не нужно определять, какие представления добавить ограничения. iOS может понять это из 'item' и' toItem'. – vacawama

+1

Если у вас есть набор ограничений в массиве (называемый 'myArrayOfContraints)', который вы хотите активировать сразу, вы можете использовать метод класса '[NSLayoutConstraint activateConstraints: myArrayOfContraints]'. – vacawama

Смежные вопросы