Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 键盘出现时不更新的约束_Ios_Swift_Autolayout_Nslayoutconstraint - Fatal编程技术网

Ios 键盘出现时不更新的约束

Ios 键盘出现时不更新的约束,ios,swift,autolayout,nslayoutconstraint,Ios,Swift,Autolayout,Nslayoutconstraint,我正在制作一个注册屏幕,希望更新一些顶部锚定,以便当键盘出现时,顶部锚定常数减小,并且键盘不覆盖任何文本字段 我创建了一个topConstant变量: var constraintConstant: CGFloat = 35 var topAnchorConstraint: NSLayoutConstraint! 我的观点如下: view.addSubview(passwordTextField) passwordTextField.leftAnchor.constraint(equalTo

我正在制作一个注册屏幕,希望更新一些顶部锚定,以便当键盘出现时,顶部锚定常数减小,并且键盘不覆盖任何文本字段

我创建了一个topConstant变量:

var constraintConstant: CGFloat = 35
var topAnchorConstraint: NSLayoutConstraint!
我的观点如下:

view.addSubview(passwordTextField)
passwordTextField.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 25).isActive = true
passwordTextField.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -25).isActive = true
passwordTextField.heightAnchor.constraint(equalToConstant: 50).isActive = true
passwordTextField.topAnchor.constraint(equalTo: emailTextField.bottomAnchor, constant: constraintConstant).isActive = true
然后我编写了以下代码:

func textFieldDidBeginEditing(_ textField: UITextField) {
    constraintConstant = 15
    view.layoutIfNeeded()
}
我不知道为什么constriants没有更新。有什么想法吗?

你需要

var topCon:NSLayoutConstraint!
//

//


嗯。当我第一次和斯威夫特一起使用iOS时,我就遇到了这个问题。看,问题在于你对锚的理解

您指定的常量的功能与您期望的不一样。(您希望它的功能类似于某种监听器,它会根据变量值的更新不断更新。它不会)它只会在设置时获取变量的值,然后不回头,除非您访问该锚并手动更改常量

这就是为什么必须存储锚点的实例,并像这样更改常量Maualy

定义约束变量:

var constraintConstant: CGFloat = 35
var topAnchorConstraint: NSLayoutConstraint!
在变量中存储适当的约束

topAnchorConstraint = passwordTextField.topAnchor.constraint(equalTo: emailTextField.bottomAnchor, constant: 35)
topAnchorConstraint.isActive = true
现在需要根据需要更改常量

func textFieldDidBeginEditing(_ textField: UITextField) {
    UIView.animate(withDuration: 1.0, animations: {
        self.topAnchorConstraint.constant = 15
        self.view.layoutIfNeeded()

    }, completion: nil)
}

工作得很有魅力。谢谢@Rakesha Shastri这不是一个duplicate@Sh_Khan“不,你的答案似乎没有任何解释。”卢克洛博茨善意地表示接受了另一个答案。我只是添加了一个解释,并添加了一个动画块,增加了一点优雅。@RakeshaShastri我不需要正确的检查,我想提醒您站点策略至少在一个答案范围内,而不是其他重复答案