Анимация UIView анимирует положение, но не ширину

Я пытаюсь преобразовать UISearchBar, как в Мобильном Safari: касание в поле поиска и это растет, в то время как поле местоположения уменьшается.

Моя текущая анимация для изменения ширины и положения поля поиска только анимирует положение: непосредственно перед тем, как это скользит к правильному месту, это просто привязывается к правильной ширине. Вот мой код:

[UIView beginAnimations:@"searchGrowUp" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDuration:0.5f];
[UIView setAnimationDelegate:self];

CGFloat findFieldWidth = findField.frame.size.width;
CGFloat urlFieldWidth = urlField.frame.size.width;
CGRect findFieldFrame = findField.frame;
CGRect urlFieldFrame = urlField.frame;

findFieldFrame.origin.x = findFieldFrame.origin.x - 150.0f;
findFieldFrame.size.width = findFieldWidth + 150.0f;
urlFieldFrame.size.width = urlFieldWidth - 150.0f;

urlField.frame = urlFieldFrame;
findField.frame = findFieldFrame;

[UIView commitAnimations];

Я изменил этот код немного ради представления его здесь, но я надеюсь, что это дает суть.

Любые предположения относительно того, почему это происходит, ценились бы!

С наилучшими пожеланиями, Aaron.

7
задан Aaron Vegh 23 March 2010 в 03:25
поделиться

1 ответ

Я разобрался с этим благодаря этому посту: Изменение размера текстового поля UISearchBar?

Оказывается, содержимое UISearchBar не изменяет размер вместе с внешним слоем. Поэтому нужно вызвать -layoutSubviews: внутри блока анимации после установки рамки на панели поиска. Таким образом, блок заканчивается так:

[findField setFrame:CGRectMake(findField.bounds.origin.y, findField.bounds.origin.y, findFieldWidth, findField.bounds.size.height)];
[findField layoutSubviews];

[UIView commitAnimations];

Реквизиты Нику Фарине!

12
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: