2014-10-27 2 views
3

У меня очень простое приложение. Он содержит красный вид и зеленую метку внутри него. Существует также кнопка, которая запускает анимацию. Я изменяю красный вид, изменяя значение константы ограничения ширины.UILabel не анимируется внутри UIView, используется автоспуск

[self.view layoutIfNeeded]; 
[UIView animateWithDuration:0.4 animations:^{ 
    self.widthConstraint.constant = width; 
    [self.view layoutIfNeeded]; 
}]; 

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

the sources here.

ТИА

ответ

7

Кажется, что я нашел корень проблемы. Ограничения не являются проблемой, UILabel есть.

Если вы замените UILabel в моем проекте простым UIView, он будет плавным, как и ожидалось. Речь идет о анимации контента UILabel. Вы можете достичь правильного поведения анимации label.contentMode = UIViewContentModeCenter, но он выглядит уродливым.

Лучший способ решить эту проблему - не пытайтесь изменить размер UILabel во время анимации. Попытайтесь придумать другое поведение. В моем случае я меняю UILabel на альфа до 0 и позицию x, чтобы увеличить ширину контейнера.

Более подробную информацию о UILabel animating here.

0

Я посмотрел на свой проект. У меня не так много опыта с установкой ограничений из редактора, но я бы настоятельно рекомендовал вам в случае проблем попробовать сделать это в коде. Лично я бы анимировал ограничение по ширине этого красного представления и задавал ограничения на поля метки с помощью визуального формата, это будет примерно так: @"H:|[label]|" и добавьте это ограничение в красное представление. Это должно решить проблему.

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