Вертикальные ограничения прикреплены к надписи кнопки. Возможно, есть еще больше ограничений для дерева представлений, но мы будем предполагать, что нет, например, целей.
//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;
}
Спасибо за ваш ответ. На самом деле это не сработало, но мне это очень помогло, открыв «constraintsAffectingLayoutForAxis», поэтому я нашел свои горизонтальные ограничения с помощью: '[self.myButton constraintsAffectingLayoutForAxis: UILayoutConstraintAxisHorizontal]' – Zaphod
К сожалению, 'constraintsAffectingLayoutForAxis' будет использоваться только в debug ... Так что вопрос по-прежнему включен ... – Zaphod
Добавлена реализация метода категории для ответа. –