Я пытаюсь преобразовать 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.
Я разобрался с этим благодаря этому посту: Изменение размера текстового поля UISearchBar?
Оказывается, содержимое UISearchBar не изменяет размер вместе с внешним слоем. Поэтому нужно вызвать -layoutSubviews: внутри блока анимации после установки рамки на панели поиска. Таким образом, блок заканчивается так:
[findField setFrame:CGRectMake(findField.bounds.origin.y, findField.bounds.origin.y, findFieldWidth, findField.bounds.size.height)];
[findField layoutSubviews];
[UIView commitAnimations];
Реквизиты Нику Фарине!