Когда я ввожу текст в поле 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()
}
}