2014-12-16 6 views
6

मैं UISearchBar को UITableView में जोड़ना चाहता हूं जिसमें पहले से ही हेडर व्यू है। जब मैं मौजूदा हेडर में खोज बार को आज़माता हूं और जोड़ता हूं तो यह तब तक काम करता है जब तक मैं उस पर टैप नहीं करता, जिस बिंदु पर मुझे The view hierarchy is not prepared for the constraint मिलता है, ऐसा प्रतीत होता है क्योंकि खोज बार तालिकादृश्य का प्रत्यक्ष सबव्यू नहीं है, इसलिए जब UISearchController कोशिश करता है उन बाधाओं को अपडेट करें जो यह नहीं कर सकते हैं।UITearchBiewHeader का UISearchBar सबव्यू?

मुझे जो मिला है, उसके आस-पास एकमात्र तरीका टेबल व्यू हेडर को खोज बार बना रहा है, फिर सबकुछ ठीक काम करता है, लेकिन निश्चित रूप से मैं अन्य विचारों को खो देता हूं जो पहले ही हेडर व्यू में थे।

उत्तर

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 को खोजकैंकर में जोड़ा गया है, लेकिन फिर जब मैं दृश्य में जांच करता हूं तो यह अब वहां नहीं है, इसलिए मुझे इसे मैन्युअल रूप से जोड़ना होगा। वर्तमान में कंटेनर में एक सबव्यूव के रूप में UISearchBar को फिर से जोड़ने के बाद प्रारंभिक फ्रेम अजीबता के खिलाफ लड़ना, लेकिन यह निश्चित रूप से सही दिशा में है। –

+0

आपको इसे दृश्य में जोड़ना होगा WillAppear: अगर (self.searchBarContainerView.subviews.count == 0) { [self.searchBarContainerView addSubview: self.searchController.searchBar]; // फ्रेम की ऊंचाई को भी ठीक करना होगा सीजीआरईटी फ्रेम = self.searchBarContainerView.frame; frame.size.height = 44.0f; self.searchBarContainerView.frame = फ्रेम; } –