以编程方式更改纵横比约束值

Posted

技术标签:

【中文标题】以编程方式更改纵横比约束值【英文标题】:Change Aspect Ratio constraint value programmatically 【发布时间】:2017-08-02 07:11:21 【问题描述】:

我正在使用 AutoLayout 进行应用设计。对于我的一个 HeaderView,我使用 AspectRatio 设置了它的高度。

现在当主视图不包含任何数据时,HeaderView 高度应为 0,添加数据时应再次将其设置为原始纵横比。

我们可以在更改任何约束的常量值时更改纵横比吗?我试过下面的代码,但它不能正常工作。

@IBOutlet weak var constOptions_Height: NSLayoutConstraint!
if arrData.count == 0 
    constOptions_Height.constant = 0.0

else
    constOptions_Height.constant = 50.0

【问题讨论】:

我认为您需要更改乘数值而不是常数。 constOptions_Height.multiplier = cgfloatValue @Rishabh Multiplier 是一个只能获取的属性。 那么您可以尝试重新创建该约束以修改乘数,就像我们分配框架以改变视图的位置一样。或者简单地从代码而不是故事板创建该约束。 ***.com/questions/31334017/… 也检查一下:***.com/questions/37294522/… 【参考方案1】:

您可以使用以下方法

给出两个约束。一个用于纵横比,另一个用于高度。

让两者交替活跃

constOptions_Aspect.isActive = false
constOptions_Height.isActive = true 

您可以在高度常数中指定高度为零。

【讨论】:

实际上,如果constOptions_Aspect的优先级低于constOptions_Height,则不必更改它。例如,如果constOptions_Aspect 具有优先级999 并且constOptions_Height 具有优先级1001,那么设置constOptions_Height.isActive = true 就足够了。 是的,没错。通过不同的优先级,我们也可以实现相同的目标。

以上是关于以编程方式更改纵横比约束值的主要内容,如果未能解决你的问题,请参考以下文章

AutoLayout约束以适应矩形内的视图,保持一定的纵横比(以编程方式)

如何以编程方式将纵横比约束应用于自定义 UICollectionViewCell?

了解纵横比约束和乘数

更改高度时保持图像纵横比

iOS 故事板中的图像更改纵横比

更改 UIImagePicker 纵横比