簡體   English   中英

如何確定NSLayoutConstraint方向?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM