更改动作视图的布局锚点

Posted

技术标签:

【中文标题】更改动作视图的布局锚点【英文标题】:changing layout anchors of view on an action 【发布时间】:2016-11-17 14:17:44 【问题描述】:

我有一个 upperLabel、一个视图和一个按钮。

ViewDidLoad() 方法中,我为视图提供了一些布局约束。点击按钮我需要更新这些约束(即视图应该向下移动)。我该怎么做。

这是我的代码。但它不起作用。

let keyView = UIView()

override func viewDidLoad() 

    keyView.frame = CGRect(x: 0, y: 0, width: 100, height: 30)
    keyView.backgroundColor = UIColor.cyan
    keyView.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(keyView)
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10).isActive = true
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20).isActive = true
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20).isActive = true
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height).isActive = true

该操作中的代码如下。

  func buttonAction(sender: UIButton!) 

    keyView.translatesAutoresizingMaskIntoConstraints = false
    keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
    keyView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 20)
    keyView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -20)
    keyView.bottomAnchor.constraint(equalTo: keyView.topAnchor, constant: keyView.frame.size.height)
    i + =1

根据上面的代码,keyView 应该在单击按钮时向下移动。但它并没有下降。

请帮帮我。 提前致谢。

【问题讨论】:

为什么不去掉之前的布局约束,添加新的action约束 是的,我什至尝试过,将初始约束设置为 .isActive = false.. 然后我添加了新的约束。 【参考方案1】:

取一个 NSLayoutConstraint 类型的全局变量,如下所示..

var keyViewTopConstraint: NSLayoutConstraint?

现在在 viewDidLoad 中,同时给出初始约束。给如下

    keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor , constant: 10)
    keyViewTopConstraint?.isActive = true

现在在那个动作中。删除初始约束并创建另一个约束并使其处于活动状态。为此,请执行以下操作

   keyViewTopConstraint?.isActive = false
   keyViewTopConstraint = keyView.topAnchor.constraint(equalTo: upperLabel.bottomAnchor, constant: CGFloat(i*50))
   keyViewTopConstraint?.isActive = true

【讨论】:

以上是关于更改动作视图的布局锚点的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式使用布局锚点的自动布局不起作用

视图创建时浮动操作按钮锚点更改

如何使自动布局约束依赖于多个其他锚点?

如何多次围绕锚点旋转视图

WinForm布局

需要有关自动布局锚点的帮助