2010-08-10 10 views
7

मैंने ऐप्पल के उदाहरण "टेबलशर्च" को देखा है कि जब उसके दायरे बटन छुआ तो खोज बार के नीचे आते हैं। http://developer.apple.com/iphone/library/samplecode/TableSearch/Introduction/Intro.htmlक्यों UISearchBar और इसके दायरे बटन एक पंक्ति में दिखाए जाते हैं?

लेकिन जब मैं अपने ही यह पहली बार में अच्छा लग रहा है बनाने लेकिन जब मैं स्पर्श यह बदसूरत की तरह दिखता है, गुंजाइश बटन और खोज पट्टी इस तरह एक ही पंक्ति में दिखाए गए हैं: http://cl.ly/BN9

क्या मेरे पास हैं आईपैड में इसे "टेबलशर्च" उदाहरण बनाने के लिए? पहले से

- (void)viewDidLoad { 

     [super viewDidLoad]; 
     self.tableView.rowHeight = 88.0f; 
     self.tableView.contentOffset = CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height); 
self.searchDisplayController.searchResultsTableView.rowHeight = self.tableView.rowHeight; 


    //BELOW DID NOT WORK: 
    CGRect b = self.searchDisplayController.searchBar.bounds; 
    self.searchDisplayController.searchBar.bounds = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight); 
    b = self.searchDisplayController.searchBar.frame; 
    self.searchDisplayController.searchBar.frame = CGRectMake(b.origin.x, b.origin.y, b.size.width, self.tableView.rowHeight); 

    //BELOW WORKS PERFECT BUT IS A PRIVATE METHOD, HENCE I AM NOT SUPPOSED TO USE IT 
    //[self.searchDisplayController.searchBar setCombinesLandscapeBars:NO]; 

    } 

धन्यवाद:

मैं आईबी में सब कुछ कर रहे हैं और नियंत्रक से प्रोग्राम के खोज पट्टी संशोधित करने का प्रयास कर रहा हूँ।

उत्तर

10

मुझे इस बग का सामना करना पड़ा है, और मैंने दोनों ने ऐप्पल के साथ एक रिपोर्ट दायर की है और तकनीकी सहायता का अनुरोध किया है। मैं आपको बता दूंगा कि यह कैसे जाता है। इस बीच में मैं आपको इस बग पर पृष्ठभूमि का एक संक्षिप्त विवरण दूंगा।

आईफोन पर, लैंडस्केप मोड में कीमती वर्टिकल स्क्रीन रीयल एस्टेट को संरक्षित करने के लिए, UISearchDisplayController UISearchBar को अपनी खोज बार और खोज क्षेत्र को एक क्षैतिज लेआउट में गठबंधन करने के लिए सेट करता है। यह स्क्रीन के बढ़ते क्षैतिज आकार (लैंडस्केप में 480 अंक) की वजह से बहुत अच्छी तरह से काम करता है। दुर्भाग्यवश, यह आईपैड पर इतना अच्छा काम नहीं करता है, जहां लैंडस्केप मोड में यूआई परिवर्तन वास्तव में पहले स्थान पर जरूरी नहीं है क्योंकि आपके पास बहुत ऊर्ध्वाधर अचल संपत्ति है। यूआईएसप्लिट व्यू कंट्रोलर के मास्टर व्यू में आपके पास अभी भी 320 पिक्सेल क्षैतिज डिस्प्ले स्पेस है, आईफोन की 480 की वृद्धि नहीं है। नतीजा एक आईएसओआर है।

संभावित रूप से समस्या यह है कि UISearchDisplayController अपनी इच्छानुसार बुरी तरह व्यवहार कर रहा है RotateToInterfaceOrientation: अवधि: विधि। विशेष रूप से, यह जांचने के लिए परेशान नहीं है कि यह एक आईफोन पर है या नहीं, इससे पहले कि यह UISearchBar पर लैंडस्केपर्स संपत्ति को जोड़ती है। आपके कोड में निजी एपीआई क्लज काम करता है क्योंकि यह UISearchDisplayController में उस निरीक्षण को ठीक करता है। लेकिन निश्चित रूप से ऐप्पल अनियंत्रित एपीआई का उपयोग करने के लिए पूर्वजों के क्रोध को बारिश करेगा, इसलिए आप नहीं कर सकते। वास्तव में हम इस पर ऐप्पल की दया पर हैं।

यदि आप आईआईएसearchDisplayController की आंख कैंडी और सुविधा छोड़ने को तैयार हैं, तो आप UISearchBar संस UISearchDisplayController का उपयोग कर सकते हैं और प्रस्तुति के पहलुओं का प्रबंधन कर सकते हैं। जाहिर है, इसके लिए बहुत अधिक कोड की आवश्यकता है और यदि ऐप्पल के एपीआई इंजीनियरों ने अपनी नौकरियां की हैं तो यह व्यर्थ होगा, लेकिन यह कम से कम डिस्प्ले बग को हल करेगा।

यदि आप ऐप्पल हैं तो आप अपने स्वयं के अनियंत्रित एपीआई का उपयोग कर सकते हैं, यही कारण है कि Mail.app में यह समस्या नहीं है।

अद्यतन

बग रिपोर्ट मैं एप्पल के साथ दायर किया है # 8,344,719 है।

+0

मैं तीन लोग हैं, जो कहना सूचित किया है कि बग मिला। क्या आप बग संख्या कह सकते हैं? – nacho4d

+0

मेल.एप का यह कारण नहीं है क्योंकि यह UISearchDisplayController का उपयोग नहीं करता है। ऐप्पल के आईपैड ऐप्स में से कोई भी नहीं करता, शायद यही कारण है कि यह बग मौजूद है। – Darren

+0

मैंने भी एक बग दायर किया। यह # 9 68 9 005 है। – Moshe

0

आप Searchbar के लिए सीमा और फ्रेम सेट करते हैं, फ्रेम यहाँ की तरह:

blabla.searchBar.frame = CGRectMake(b.origin.x, 
            b.origin.y, 
            b.size.width, 
            self.tableView.rowHeight); 

ऐसा लगता है वहाँ ऊंचाई के साथ एक समस्या है। स्कोप बटन को खोज बार के नीचे कुछ जगह की आवश्यकता होती है, इसलिए आपको दोनों सीमाओं और फ्रेम की ऊंचाई बढ़ाना चाहिए।

यदि आप कुछ ईवेंट पर स्कोप बटन दिखाते हैं और छुपाते हैं तो आपको प्रत्येक बार फ्रेम आकार समायोजित करने की आवश्यकता होती है।

0

मैं एक iPad पर इस समस्या हो रही है, लेकिन मैं अगर मैं अपने कार्यान्वयन फ़ाइल में इस डालने यह काम करने के लिए प्राप्त कर सकते हैं:

@synthesize tableView; 

मेरा अनुमान है कि वहाँ XIB लोड होने के साथ कुछ बुरा है , लेकिन मुझे नहीं पता कि यह इसे ठीक क्यों करेगा।

1

निम्नलिखित कोड का उपयोग कर आप चेतावनी प्राप्त नहीं होंगे:

if ([self.searchDisplayController.searchBar respondsToSelector:@selector(setCombinesLandscapeBars:)]) 
{ 
    objc_msgSend(self.searchDisplayController.searchBar, @selector(setCombinesLandscapeBars:), NO); 
}