以编程方式更改纵横比约束值
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约束以适应矩形内的视图,保持一定的纵横比(以编程方式)