2012-03-09 4 views

ответ

9

Проблема заключается в том, что некоторые внутренние виды поиска бар, вынуждающие изменение размера игнорировать анимацию.

Это работает для меня -

[UIView animateWithDuration:0.2 animations:^ { 
        [searchBar setFrame:searchBarFrame]; 
        [searchBar setNeedsLayout]; 
       }]; 

Где searchBarFrame - это кадр вам нужно установить (я сохранить его перед панель поиска изменяется в первый раз)

+0

Это то, что я ищу !!! Спасибо ... – Wot

+1

Вы не должны вызывать layoutSubviews напрямую, вместо этого лучше позвонить [searchBar setNeedsLayout]; [searchBar layoutIfNeeded]; – myell0w

+0

Да, вы правы, спасибо. Я отредактировал свой ответ. – KaterinaPetrova

0

Попробуйте это:

[UIView animateWithDuration:0.3 animations:^{ 
    self.searchDisplayController.searchBar.frame = CGRectMake(0, 200, 320, 44); 
}]; 
+0

Я пробовал, он не работал. Я знаю метод для анимации представления, но UISearchBar не анимирует правильный путь, пока я оживляю его размер. – Wot

+0

Я пробовал Core Animation и получил тот же результат. Кажется, что UISearchBar выполняет некоторую дополнительную работу, когда мы с ней взаимодействуем (она автоматически изменяет размеры, когда я нажимаю на нее текстовую область). – Wot

+0

работает для меня. вы можете показать мне свой код? моя первая догадка, не видя этого, заключается в том, что у вас есть плохой/ноль для вашего контроллера отображения. можете ли вы бросить NSLog посмотреть? – danh

1

Используйте опцию UIViewAnimationOptionLayoutSubviews:

[UIView animateWithDuration:.25 
         delay:0 
        options:UIViewAnimationOptionLayoutSubviews 
       animations:^{ 
        CGRect frame = searchBar.frame; 
        frame.size.width = newWidth; 
        searchBar.frame = frame; 
       } completion:nil 
]; 
Смежные вопросы