2015-02-17 2 views
-1

У меня есть этот странный новый вопрос: этот код (который прекрасно работает)возвращает объект в исходное положение (после анимации) при появлении клавиатуры

[UIView animateWithDuration:0.4 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
     CGRect frame = _logoClaim.frame; 
     frame.origin.y -= 180; 
     _logoClaim.frame = frame; 
    } completion:NULL]; 

перемещает вид, который содержит UIImageView и UILabel к наверху моего self.view.

Вид, который перемещается, отображает UITextField. Когда я пытаюсь записать текст в UITextField, очевидно, появится клавиатура. И в этот момент анимированный вид до этого возвращается к исходной стартовой позиции !!!

В чем причина?

+0

Не прошло и дня, что я не вижу какой-либо версии этого вопроса. Это связано с автоматической компоновкой. Если вы устанавливаете кадры любых объектов, созданных в раскадровке или xib (с автоматическим расположением), они будут возвращаться к их размеру и позициям, определяемым их ограничениями, всякий раз, когда представление нужно перерисовать. – rdelmar

+0

Да, я знаю. И я понял, что мне нужно решить без автоматизации проблему ... но я подумал, что может быть проще. В любом случае ... спасибо много. Только одно: я держу ваш -1, но если вы видите каждый день эту проблему ... разве вы не думаете, что это вопрос для такого сайта? Или нам нужно опубликовать на сайте masterchef?!?!? думаю об этом. Имейте хороший день и извините меня за ваше время rdelmar: | – Blasco73

+1

Как вы должны это решить, так это сделать IBOutlets для любых ограничений, которые вам нужно изменить, любые изменения их постоянных значений в коде вместо установки фреймов. – rdelmar

ответ

1

Поместите блок завершения в свою анимацию и проверьте законченное значение. Клавиатура отменяет анимацию, а готовый bool будет НЕТ. Я бы отключил ввод в UITextField, пока анимация не будет завершена. Сделайте это в своем блоке завершения.

EDIT Глядя на вашу продолжительность и перечитывая вопрос, я могу ошибаться в том, о чем я думаю. Если этот ответ неверен, я удалю его.

Кроме того, поиск коды для _logoClaim.frame в случае, если вы регулируете его onKeyboardWillAppear

+0

Конечно, решайте таким образом. Это только то, что я искал короткий путь! Большое спасибо! – Blasco73

0

Вы должны были бы создать выход для своих нижних/верхних пространственных ограничений и обновить постоянное значение этого внутри блока анимации.

[UIView animateWithDuration:0.4 
... 
animations:^{ 
    /*Update the value of the constraint outlet supposing it to be a bottom space constraint*/ 
    _layoutConstraintBottom += 180; 
    [self.logoClaim layoutIfNeeded]; 
} completion:NULL]; 

Не забудьте позвонить -layoutIfNeeded для вашего оживляющего вида.

Смежные вопросы