2014-12-16 16 views
6

Zaten bir üstbilgi görünümüne sahip bir UITableView için bir UISearchBar eklemek istiyorum. Arama çubuğunu varolan üstbilgi görünümüne eklemeye çalıştığımda, üzerine dokunana kadar çalışıyorum, bu noktada The view hierarchy is not prepared for the constraint aldığımda, arama çubuğunun doğrudan tablo görünümünde görünmemesi nedeniyle görünen UISearchController çalıştığında yapamayacağı kısıtlamaları güncelleyin.UISearchBar UITableViewHeader alt görünümünde?

Bulabildiğim tek şey, tablo görünümü üstbilgisini arama çubuğunu oluşturuyor, sonra her şey iyi çalışıyor, ancak tabiki daha sonra başlık görünümünde olan diğer görünümleri kaybediyorum.

cevap

4

Bu davranışı ortadan kaldırmak için, arama çubuğumu UIView numaralı kapsayıcıya koyun. Kısıtlamaları bu kapsayıcı görünümüne uygulayın ve kap içindeki arama çubuğu için otomatik düzeltme maskesi kullanın.

// 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

Vay, teşekkür ederim! Gönderinizi bulana kadar arama yapmak ve çeşitli geçici çözümleri denemem gerekiyordu. UISearchController kullanıyorum beri UISearchBar aramaBarContainer'a eklendiğinde garip bir sorun var, ancak daha sonra viewWillAppear içinde denetlediğimde, artık el ile eklemek zorundayım. Şu anda UISearchBar'ı kapsayıcıda bir alt görünüm olarak yeniden ekledikten sonra ilk kare tuhaflığına karşı mücadele ediyor, ancak bu kesinlikle doğru yönde. –

+0

Bunu viewWillAppear uygulamasına eklemeniz gerekebilir: if (self.searchBarContainerView.subviews.count == 0) { [self.searchBarContainerView addSubview: self.searchController.searchBar]; // ayrıca çerçeve yüksekliğini de sabitlemelidir CGRect frame = self.searchBarContainerView.frame; frame.size.height = 44.0f; self.searchBarContainerView.frame = frame; } –

İlgili konular