我阅读了相关的问题(几乎相同的标题),但这不是我的情况。我有一个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()
}
因为我认为它可能会发生,因为我试图从其他类更新常量,但它没有帮助。我究竟做错了什么?
答案 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()
如果仍然无法正常工作,请插入详细的源代码,以便我们找出问题所在。