2013-12-09 6 views
1

Я хотел бы изменить некоторые ограничения автоопределения во время выполнения в iOS7, потому что один вид должен быть удален, а кнопка на его стороне должна увеличиться, чтобы заполнить пустоту исчезнувшего вида.Как определить ориентацию NSLayoutConstraint?

Для этого я хочу удалить все горизонтальные ограничения, прикрепленные к кнопке, и добавить новые ... К сожалению, даже я нашел тип UILayoutConstraintAxis, я до сих пор не нашел, как узнать ориентацию от NSLayoutConstraint.

ответ

2

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

//Assuming your UIButton variable is named 'button' 
UIView * superview = [button superview]; 
NSArray * verticalConstraints = [superview constraintsAffectingLayoutForAxis: UILayoutConstraintAxisVertical]; 

NSArray * constraintsAffectingButton = @[]; 
for (NSLayoutConstraint * constraint in verticalConstraints) 
{ 
    if (constraint.firstItem == button || constraint.secondItem == button) 
    { 
     constraintsAffectingButton = [constraintsAffectingButton arrayByAddingObject:constraint]; 
    } 
} 
[superview removeConstraints:constraintsAffectingButton] 

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

- (BOOL)isVerticalConstraint 
{ 
    switch (self.firstAttribute) 
    { 
     case NSLayoutAttributeBaseline: 
     case NSLayoutAttributeCenterY: 
     case NSLayoutAttributeTop: 
     case NSLayoutAttributeBottom: 
     case NSLayoutAttributeHeight: 
      return YES; 
      break; 
     default: 
      break; 
    } 

    return NO; 
} 
+0

Спасибо за ваш ответ. На самом деле это не сработало, но мне это очень помогло, открыв «constraintsAffectingLayoutForAxis», поэтому я нашел свои горизонтальные ограничения с помощью: '[self.myButton constraintsAffectingLayoutForAxis: UILayoutConstraintAxisHorizontal]' – Zaphod

+0

К сожалению, 'constraintsAffectingLayoutForAxis' будет использоваться только в debug ... Так что вопрос по-прежнему включен ... – Zaphod

+0

Добавлена ​​реализация метода категории для ответа. –

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