Когда я ввожу текст в UITextField, позиция всего представления перемещается вверх - PullRequest
0 голосов
/ 01 мая 2019

Когда я ввожу текст в поле UIText, которое является подпредставлением подпредставления представления, весь вид немного сдвигается вверх.

Класс это представление. Он имеет два подпредставления, которые представляют собой collectionView и представление со своим собственным подпредставлением - UITextfield.

Я создаю объект из этого класса в ViewController и устанавливаю его ограничения прямо там. Ограничения остальных компонентов (collectionView и view с текстовым полем) устанавливаются в классе.

Когда я использую panGesture и перетаскиваю вид для анимации пользовательского интерфейса, он работает нормально. Но когда текст вводится в текстовое поле, создается впечатление, что компоновка пересчитывается и нижнее ограничение получает меньшее значение, чем желаемое.

Существует 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 голосов
/ 02 мая 2019

Я исправил это. Решение: Добавьте self.view.translatesAutoresizingMaskIntoConstraints = false для viewDidLoad () в вашем ViewController, который является родительским для вашего класса представления.

...