当我在UITextField中输入文本时,整个视图的位置会向上移动

时间:2019-05-01 19:39:02

标签: swift view nslayoutconstraint

当我在UITextfield中输入文本时,该文本是该视图的子视图的子视图,整个视图会稍微向上移动。

类是一个视图。它有两个子视图,分别是collectionView和带有自己的子视图的视图-UITextfield。

我正在ViewController中从该类创建一个对象,然后直接在其中设置其约束。在该类中设置了其余组件的约束(collectionView和带文本框的视图)。

当我使用panGesture并拖动视图以对UI进行动画处理时,它可以正常工作。但是,当文本输入到文本字段中时,它看起来像重新计算了布局,并且底部约束得到的值比期望值低。

有一个gif显示问题的样子: https://gfycat.com/ColorlessTheseAnophelesmosquito

@objc func draggedView(_ sender:UIPanGestureRecognizer) {

    ViewController().view.bringSubviewToFront(self)
    let translation = sender.translation(in: ViewController().view)

    if self.layer.frame.minY >= UIScreen.main.bounds.height * 0.25 && translation.y > 0 {


        //values
        self.bottomTaskViewConstraint.constant = -30
        self.heightTaskViewContraint.constant = 55

        //animation
        UIView.animate(withDuration: 0.2) {

            self.pinPosition = UIScreen.main.bounds.height * 0.33
            self.layer.frame.origin.y = self.pinPosition
            self.visibleHeight = ViewController().view.frame.maxY - self.frame.maxY - 20
            self.bottomConstraint.constant = self.visibleHeight
            self.layoutIfNeeded()


        }

        self.newTaskTextfield.becomeFirstResponder()

    } else if self.layer.frame.minY <= UIScreen.main.bounds.height * 0.33 && self.layer.frame.minY > UIScreen.main.bounds.height * 0.25 && translation.y < 0 {

        //values
        self.bottomTaskViewConstraint.constant = -100
        self.heightTaskViewContraint.constant = 110

        //animation
        UIView.animate(withDuration: 0.2) {

            self.pinPosition = UIScreen.main.bounds.height * 0.25
            self.layer.frame.origin.y = self.pinPosition
            self.visibleHeight = ViewController().view.frame.maxY - self.frame.maxY - 20
            self.bottomConstraint.constant = self.visibleHeight
            self.layoutIfNeeded()

        }

        newTaskTextfield.resignFirstResponder()

    }

}

1 个答案:

答案 0 :(得分:0)

我修复了它。解: 将self.view.translatesAutoresizingMaskIntoConstraints = false添加到您的ViewController的viewController中的viewDidLoad()中。