【问题标题】: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 是一个只能获取的属性。
  • 那么您可以尝试重新创建该约束以修改乘数,就像我们分配框架以改变视图的位置一样。或者简单地从代码而不是故事板创建该约束。 stackoverflow.com/questions/31334017/…

标签: swift ios-autolayout


【解决方案1】:

您可以使用以下方法

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

让两者交替活跃

constOptions_Aspect.isActive = false
constOptions_Height.isActive = true 

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

【讨论】:

  • 实际上,如果constOptions_Aspect的优先级低于constOptions_Height,则不必更改它。例如,如果constOptions_Aspect 具有优先级999 并且constOptions_Height 具有优先级1001,那么设置constOptions_Height.isActive = true 就足够了。
  • 是的,没错。通过不同的优先级,我们也可以实现相同的目标。
猜你喜欢
  • 1970-01-01
  • 2015-09-28
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多