[英]How to determine NSLayoutConstraint orientation?
我想在iOS7的運行時修改一些自動布局約束,因為必須刪除一個視圖,並且其側面的按鈕必須自己放大以填充消失的視圖的空白。
為此,我希望刪除按鈕上附加的所有水平約束,並添加新的約束...不幸的是,即使我找到了UILayoutConstraintAxis
類型,也仍然找不到如何知道給定NSLayoutConstraint
的方向。 。
垂直約束附加到按鈕的超級視圖。 可能在視圖樹上方也存在更多約束,但我們將假定不出於示例目的。
//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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.