Когда появляется клавиатура, она сбрасывает смещение внутренних видов.

Нажав на кнопку, я перемещаю все вверх и показываю UITextField в одном из UIViews, которые я перемещаю:

UIView.animateWithDuration(0.7, delay: 0.0, options: .CurveEaseOut, animations: {
      self.logo.frame.offset(dx: 0, dy: -200)
}, completion: nil)
UIView.animateWithDuration(0.2, delay: 0.1, options: .CurveEaseOut, animations: {
      self.fill.frame.offset(dx: 0, dy: -230)
}, completion: nil)
UIView.animateWithDuration(0.3, delay: 0.5, options: .CurveEaseOut, animations: {
      self.form.frame.offset(dx: 0, dy: -240)
      self.form.alpha = 1.0
}, completion: nil)

Но когда я нажимаю на UITextfield (в форме UIView), и появляется клавиатура, она сбрасывает смещение всего.

Как этого избежать?


person lenyapugachev    schedule 17.04.2015    source источник


Ответы (1)


Я предполагаю, что вы используете AutoLayout для размещения своих элементов внутри вашего представления, которое хочет исправить «неправильное размещение» вашего кадра. Добавьте UITextField с ограничениями и измените значения в ваших ограничениях для вашего содержимого.

Кроме того, когда вы используете tableview.rowHeight = UITableViewAutomaticDimension, ваши строки автоматически адаптируются к новой высоте.

Вы не должны использовать frame ни для чего другого, кроме анимации, где результат уже соответствует ожиданиям AutoLayout.

person vrwim    schedule 17.04.2015
comment
Спасибо за помощь. Да, я использую AutoLayout. - person lenyapugachev; 17.04.2015
comment
У меня тоже была эта проблема, и я пытался заставить кадры делать то, что хотел, в то время как единственное, что мне нужно было сделать, это изменить одно ограничение. - person vrwim; 17.04.2015
comment
@lenyapugachev Это решило вашу проблему? Если это так, примите это как ответ. - person vrwim; 17.04.2015