2012-06-19 2 views
0

У меня есть UIView - назовите его HomeView, который содержит UITableView и UISearchBar. То есть, они являются подпунктами. Они добавляются в viewDidLoad для HomeView. Картинка стоит тысячи слов:Скользящий поиск Бар вниз и одновременное изменение размера Вид на сиблинг

enter image description here

enter image description here

Как видно из этих скриншотов, то первый элемент в UITableView скрыт когда отображается UISearchBar. Вот соответствующий код:

- (void) viewDidLoad 
    self.table_view = [UITableView.alloc.initWithFrame: self.view.bounds style:UITableViewStylePlain]; 
    self.table_view.bounds.origin.y += 44; 
    self.table_view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    // ^^^ This is the code I believe is one source of my problem 



// Triggered when search button in nav bar is pressed 

// code to calculate delta here 

// Here's how the view is animated. The search bar frame 
// is dropped down (works), and ideally, the tableview 
// drops down exactly the same amount at the same time. 
// If the action is to hide, then the inverse happens 
// because +delta+ will have been calculated as a 
// negative number above. 
[UIView animateWithDuration: 0.7 
    delay: 0.0 
    options: UIViewAnimationOptionCurveEaseIn 
    animations:^ { 
    self.searchBar.frame = CGRectOffset(@searchBar.frame, 0.0, delta); 
    } 
    completion:^(BOOL finished){ 
    self.searchBarVisible = !self.searchBarVisible 
    self.searchBar.hidden = !self.searchBarVisible 
    edgeInsets = UIEdgeInsetsMake(0.0f, self.searchBarVisible ? delta : 0.0f, 0.0f, 0.0f) 
    [tableView setContentInset: edgeInsets] 
    } 
]; 

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

Проблема, насколько я могу судить, заключается в том, что в viewDidLoad прилагаемый HomeView не был визуализирован, поэтому размер пока неизвестен. Я могу получить размеры экрана и использовать его, но я думал, что маска для автоматического изменения размера лучше подходит, не так ли?

Есть ли очевидные недостатки в этом, и есть ли способ заставить табличный вид анимировать вниз в то же самое время, когда панель поиска?

Thanks

+1

Ненавижу быть этим парнем, но почему бы не просто использовать tableViewController? Сделав это, следуя [этому фрагменту кода примера яблока] (http://developer.apple.com/library/ios/#samplecode/TableSearch/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007848), это намного проще, чем вручную изменять размеры просмотров. – erran

ответ

0

Хорошо, давайте попробуем это снова!

В вашей анимации блока, измените строку, где вы делаете edgeInsets к:

edgeInsets = UIEdgeInsetsMake(self.searchBarVisible ? delta : 0.0f, 0.0f, 0.0f, 0.0f); 

Из того, что я могу сказать, первый аргумент является вершиной, и тот, который вы установили был левый врезке.

+0

Это прекрасно работает. Позиционные параметры действительно меня заворачивают. –