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

标签 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()
    }

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

最佳答案

您应该做的第一件事是检查约束是否仍然从连接检查器连接到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/

相关文章:

ios - Objective-C 外部常量属性到 Swift 枚举的转换

uitableview - 在 Swift 上子类化 UITableViewCell - 编辑 UITableView 行时出错

sql-server - 添加约束是 DDL 或 DML

mysql - 迁移模型时使用 MySQL 方言的 Sequelize 无法生成外键

sql - 检查对同一表中唯一列的约束引用

iOS:自动布局与在 iOS 7 和 iOS 8 上对 subview 应用约束的差异

ios - Swift 链接错误 : type metadata accessor for Module. 类

swift - Swift 结构中的非可选值返回可选值

ios - 如何获取 UITableView 单元格选择中哪个元素收到选择?

ios - Xcode Storyboard : Constraints don't let me put space between objects in a stack