首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用视图中声明的带有函数的declared约束

禁用视图中声明的带有函数的declared约束
EN

Stack Overflow用户
提问于 2019-10-19 01:23:31
回答 2查看 62关注 0票数 0

下面的代码在视图加载中声明了布局约束。当函数selena被调用时,我希望约束更改为Selena函数中的约束。当我调用函数时,我不会更改对象。它没有效果。我知道,不知怎么的,我必须解除原来的约束。

代码语言:javascript
复制
   override func viewDidLoad() {

    NSLayoutConstraint.activate ([
        i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200),

        i.widthAnchor.constraint(equalToConstant: 300),
        i.heightAnchor.constraint(equalToConstant: 450),

    ])

}


@objc func selena(){
    NSLayoutConstraint.activate ([
        i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
        i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50),

        i.widthAnchor.constraint(equalToConstant: 20),
        i.heightAnchor.constraint(equalToConstant: 450),

    ])

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-19 01:36:15

您可以保存对它们的引用,然后使用deactivate

代码语言:javascript
复制
  var oldCons = [NSLayoutConstraint]()

   override func viewDidLoad() {
       super.viewDidLoad()
     oldCons = [
        i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150),
        i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -200), 
        i.widthAnchor.constraint(equalToConstant: 300),
        i.heightAnchor.constraint(equalToConstant: 450)
     ]
    NSLayoutConstraint.activate(oldCons)

}


@objc func selena(){

    NSLayoutConstraint.deactivate(oldCons)
    NSLayoutConstraint.activate ([
        i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :50),
        i.topAnchor.constraint(equalTo: view.centerYAnchor, constant : -50), 
        i.widthAnchor.constraint(equalToConstant: 20),
        i.heightAnchor.constraint(equalToConstant: 450) 
    ])


}

高度连接没有改变,您可以将其从viewDidLoad中的数组中提取出来

代码语言:javascript
复制
 i.heightAnchor.constraint(equalToConstant: 450).isActive = true

并将其从selena函数中删除

票数 0
EN

Stack Overflow用户

发布于 2019-10-19 01:35:41

您需要将约束赋值给变量,并在需要更改它们时更改它们的常量。下面是带有尾部约束的示例。没有必要改变锚,只有常数。你就是这样做的。

代码语言:javascript
复制
var iTrailingConstraint:NSLayoutConstraint?

override func viewDidLoad() {
   iTrailingConstraint = i.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :150).isActive = true
}

调用selena时,可以将常量动画到所需的常量。在控制器视图上调用layoutIfNeeded()

代码语言:javascript
复制
@objc func selena(){
  UIView.animate(withDuration: 0.5, animations: {
    self.iTrailingConstraint?.constant = 50
    self.view.layoutIfNeeded()
  })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58459764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档