更改Autolayout Anchor约束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改Autolayout Anchor约束相关的知识,希望对你有一定的参考价值。

我有一个UITextField,我正试图在键盘出现时改变它的位置。更具体地说,我想将文本字段向上移动,使其位于键盘上方。我的代码看起来像这样

let textField = myCustomTextField()

override func viewDidLoad() {
     //set up textfield here
     //constrains blah blah

     textField.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor,
          constant: -view.bounds.height * 0.05).isActive = true

     //more constraints
}

我接下来要做的是更改该约束,以便在键盘出现时提升文本字段。我的代码看起来像这样:

 @objc func keyboardWillShow(notification: NSNotification) {
     textField.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor,
          constant: -view.bounds.height * 0.05).constant = 200 //200 is a sample number I have a math calculation there
     textField.layoutIfNeeded()
} 

这不起作用,因为仅通过使用constraint(equalTo: constant:)引用该约束实际上不会返回任何约束。有没有办法引用该约束而不为我想要更改的每个约束创建变量并更改其常量?

答案

您的代码的问题是您创建了第二个约束而不是更改当前,您应该保持对创建的引用并更改它的常量,您可以像这样引用它

var bottomCon:NSLayoutConstraint?

override func viewDidLoad() {

   bottomCon =  textField.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor,
      constant: -view.bounds.height * 0.05)
   bottomCon.isActive = true

 }

然后你可以用任何方法访问它并使用常量属性

编辑:对于您创建的每个约束,分配标识符并按如下方式访问它

 let textFieldCons= button.constraints.filter { $0.identifier == "id" }
 if let botCons = textField.first {
      // process here
    }

以上是关于更改Autolayout Anchor约束的主要内容,如果未能解决你的问题,请参考以下文章

iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件

AutoLayout常量更改不动画

更改 AutoLayout 约束的连接点?

AutoLayout 约束动画从错误的点缩放

代码加约束VFL语法的详细使用介绍(代替Autolayout进行布局,比Autolayout更简单明了,生动直观)

何时在 iOS 7 中使用 AutoLayout 更新约束