如何以编程方式更改约束常量?

时间:2016-11-26 08:53:28

标签: swift constraints

我阅读了相关的问题(几乎相同的标题),但这不是我的情况。我有一个MKMapView,在屏幕的底部我有ScrollView和ImageView。它们是隐藏的,但当我展示它们时,我想改变我的MapView的底部约束。问题是,当我更新底部约束时,我的MapView忽略它 - 我让ScrollView和ImageView透明检查它 - 甚至向上滚动,我不明白为什么。我更新常量的代码是:

bt.flyImg.isHidden = true
bt.mapBottom.constant -= bt.flyImg.height
bt.view.layoutIfNeeded()


bt.flyImg.isHidden = false
bt.mapBottom.constant += bt.flyImg.height
bt.view.layoutIfNeeded()

我检查了约束,这是我需要的约束。我试着写点像

func layout()
    {
        self.view.layoutIfNeeded()
    }

因为我认为它可能会发生,因为我试图从其他类更新常量,但它没有帮助。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

您应该做的第一件事是检查约束是否仍然从Connections Inspector连接到mapBottom(如果您使用的是Storyboard)。如果它仍然不起作用,那么您可以尝试替代方法,从constarint的superview更新MapView的底部约束。

为此,您必须能够通过为其提供标识符来识别MapView的底部约束。为此,请在Storyboard的文档大纲中查看MapView的约束,找到底部约束,转到Size Inspector并为约束赋予标识符,让我们说&#34 ; MapViewBottom"

现在您必须查看MapView的超视图约束,找出正确的约束并更改常量。

    for constraint in yourMapView.superview!.constraints {

    if constraint.identifier == "MapViewBottom" {
        constraint.constant = flyImg.isHidden ? -flyImg.height : flyImg.height
    }
    }

然后,您可以调用视图以在需要时重新计算约束

    view.layoutIfNeeded()

答案 1 :(得分:0)

我认为你最初可能会将mapBottom的常量减小到flyImg的高度。而不是bt.mapBottom.constant -= bt.flyImg.height,将其更改为其默认常量值。如果它固定在屏幕的两侧而不是它

bt.flyImg.isHidden = true
bt.mapBottom.constant = 0 //if default value is 0. Just check it on storyboard.
bt.view.layoutIfNeeded()


bt.flyImg.isHidden = false
bt.mapBottom.constant += bt.flyImg.height
bt.view.layoutIfNeeded()

如果仍然无法正常工作,请插入详细的源代码,以便我们找出问题所在。