更改Autolayout Anchor约束

问题描述 投票:0回答:1

我有一个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:)引用该约束实际上不会返回任何约束。有没有办法引用该约束而不为我想要更改的每个约束创建变量并更改其常量?

swift uitextfield ios-autolayout
1个回答
0
投票

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

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
    }
© www.soinside.com 2019 - 2024. All rights reserved.