gpt4 book ai didi

ios - 如何确定 NSLayoutConstraint 方向?

转载 作者:行者123 更新时间:2023-11-29 10:50:55 26 4
gpt4 key购买 nike

我想在 iOS7 的运行时修改一些自动布局约束,因为必须删除一个 View ,并且其一侧的按钮必须自行放大以填充消失 View 的空白。

为此,我希望删除所有附加到按钮的水平约束,并添加新的......不幸的是,即使我找到了 UILayoutConstraintAxis 类型,我仍然没有找到了如何知道给定 NSLayoutConstraint 的方向。

最佳答案

垂直约束附加到按钮的父 View 。 View 树的上层也可能有更多约束,但出于示例目的,我们假设没有。

//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;
}

关于ios - 如何确定 NSLayoutConstraint 方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com