2014-12-16 3 views
6

Я хочу добавить UISearchBar в UITableView, который уже имеет вид заголовка. Когда я пытаюсь добавить строку поиска в существующий заголовок, он работает до тех пор, пока я не коснусь его, и в этот момент я получу The view hierarchy is not prepared for the constraint, что похоже на то, что панель поиска не является прямым поднабором таблицы, поэтому, когда UISearchController пытается обновить ограничения, которые он не может.Подвижность UISearchBar UITableViewHeader?

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

ответ

4

Чтобы обойти это поведение, я разместил свою панель поиска в контейнере UIView. Примените ограничения к этому представлению контейнера и используйте маску авторазмера для панели поиска в контейнере.

// Configure header view 
UIView *headerView = ... 
... 

// Create container view for search bar 
UIView *searchBarContainer = [UIView new]; 
searchBarContainer.translatesAutoresizingMaskIntoConstraints = NO; 
[searchBarContainer addSubview:self.searchBar]; 
[headerView addSubview:searchBarContainer]; 
self.searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

// Apply constraints involving searchBarContainer 
[headerView addConstraint: ...]; 
... 

// Then add header to table view 
self.tableView.tableHeaderView = headerView; 
+0

Ничего себе, спасибо! Мне потребовались несколько дней, чтобы найти и попробовать различные обходные пути, пока вы не найдете свой пост. Поскольку я использую UISearchController, у меня есть странная проблема, когда UISearchBar добавляется в searchBarContainer, но тогда, когда я проверяю viewWillAppear, его больше нет, поэтому мне нужно вручную добавить его снова. В настоящее время борется с первоначальной фальшивой странностью после повторного добавления UISearchBar в качестве подсмотра в контейнере, но это определенно в правильном направлении. –

+0

Возможно, вам придется добавить это в viewWillAppear: if (self.searchBarContainerView.subviews.count == 0) { [self.searchBarContainerView addSubview: self.searchController.searchBar]; // Также необходимо исправить высоту кадра CGRect frame = self.searchBarContainerView.frame; frame.size.height = 44.0f; self.searchBarContainerView.frame = frame; } –

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