我阅读了相关问题(标题几乎相同),但这不是我的情况。我有一个 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()
}
因为我认为这可能会发生,因为我尝试从其他类更新常量,但它没有帮助。我究竟做错了什么?
最佳答案
您应该做的第一件事是检查约束是否仍然从连接检查器连接到mapBottom(如果您使用的是 Storyboard)。如果是,但仍然不起作用,那么您可以尝试另一种方法,从 constarint 的 super View 更新 MapView 的底部约束。
为此,您必须能够通过为其提供标识符来识别 MapView 的底部约束。为此,请在 Storyboard 的文档大纲中查看 MapView 的约束,找到底部约束,转到 Size Inspector 并为该约束指定一个标识符,例如“MapViewBottom”。
现在您必须查看 MapView 的 super View 约束,确定正确的约束并更改常量。
for constraint in yourMapView.superview!.constraints {
if constraint.identifier == "MapViewBottom" {
constraint.constant = flyImg.isHidden ? -flyImg.height : flyImg.height
}
}
如果需要,您可以调用 View 来重新计算约束
view.layoutIfNeeded()
关于swift - 如何以编程方式更改约束常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816619/