出现键盘时约束未更新

时间:2018-08-27 15:06:04

标签: ios swift autolayout nslayoutconstraint

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

我创建了一个topConstant变量:

var constraintConstant: CGFloat = 35

并按照以下步骤设置我的观点:

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()
}

我不确定为什么有害对象没有更新。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您需要

$articlecomment = new Article_comment();
$articlecomment->user_id  = Auth::user()->id;//Comment by user id
$articlecomment->article_id = $request->articleid;
$articlecomment->comment    = $request->comment;
$articlecomment->save();   
auth()->user()->notify(new ArticleNotification($articlecomment));
//$articlecomment->user()->notify(new ArticleNotification($articlecomment));

//

var topCon:NSLayoutConstraint!

//

topCon = passwordTextField.topAnchor.constraint(equalTo: emailTextField.bottomAnchor, constant: constraintConstant)
topCon.isActive = true

答案 1 :(得分:0)

好的。我第一次使用Swift在iOS上开始时遇到了这个问题。看到问题出在您对锚的理解上。

您指定的常数不能像您期望的那样起作用。 (您期望它像某种侦听器一样工作,它将根据变量值的更新不断更新。它不是。)它只会在设置时获取变量的值,然后不再显示返回,除非您访问该锚点并手动更改常数。

这就是为什么您必须存储锚的实例并像这样每年更改常量的原因。

定义约束变量:

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)
}