2010-03-05 7 views
12

मेरा ऐप का टेबल व्यू पूर्ण स्क्रीन ऊंचाई पर कब्जा नहीं करता है, क्योंकि मैंने बैनर के लिए नीचे 50px की अनुमति दी है।आईफोन एसडीके: UISearchDisplayController के तालिका दृश्य का आकार सेट करना

जब मैं खोज बार में टाइप करना शुरू करता हूं, तो खोज परिणाम तालिका दृश्य बड़ा होता है; यह खोज बार और टैब बार के बीच सभी उपलब्ध स्क्रीन स्पेस भरता है। इसका मतलब है कि बैनर द्वारा आखिरी खोज परिणाम अस्पष्ट है।

मैं UISearchDisplayController द्वारा उपयोग किए गए तालिका दृश्य का आकार कैसे निर्दिष्ट करूं? कोई सीमा या फ्रेम संपत्ति नहीं है जिसे मैं देख सकता हूं।

जोड़ने, संपादित करने स्क्रीनशॉट:

यह कैसे तालिका दृश्य आईबी में स्थापित किया जाता है। यह संश्लेषित टैब बार से 50px छोटा होता है।

alt text http://iphone.lightwood.net/StackOverflow/gstableviewinib.png

यह सामान्य रूप से कैसे सामग्री प्रदर्शित करता है। मैं यहाँ बहुत नीचे स्क्रॉल किया है। alt text http://iphone.lightwood.net/StackOverflow/gstableviewatbottom.png

यह खोज करते समय प्रदर्शित होता है। फिर, मैं बहुत नीचे स्क्रॉल किया है। यदि मैं बैनर विज्ञापन अक्षम करता हूं, तो मैं देख सकता हूं कि खोज प्रदर्शन तालिका टैब बार पर सीधे फैलती है।

alt text http://iphone.lightwood.net/StackOverflow/gssearchviewatbottom.png

+0

यह भी ध्यान देने योग्य है कि मैंने तालिका दृश्य की विभिन्न ऊंचाइयों की कोशिश की है, और खोज प्रदर्शन परिणाम हमेशा स्क्रीन के नीचे तक विस्तारित होते हैं। मुद्दा यह नहीं है कि खोज बार स्वयं ~ 50px है, बैनर के पीछे सब कुछ दबा रहा है। –

उत्तर

50

इस को हल करने की कुंजी तालिका दृश्य की ज्यामिति को बदलने के दौरान पता लगाना था। कॉलिंग:

[self.searchDisplayController.searchResultsTableView setFrame:someframe]; 

UISearchDisplayController बनाने के बाद व्यर्थ था। जवाब था इस प्रतिनिधि विधि:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    tableView.frame = someframe; 
} 

ध्यान दें, मैं भी -searchDisplayController:didLoadSearchResultsTableView की कोशिश की थी, लेकिन यह वहाँ में अच्छा नहीं किया। आपको इसका आकार बदलने के लिए प्रदर्शित होने तक प्रतीक्षा करना होगा।

यह भी ध्यान रखें कि यदि आप बस tableView.frame = otherTableView.frame असाइन करते हैं, तो खोज परिणाम तालिका इसके संबंधित खोज बार को ओवरलैप करती है, इसलिए खोज को साफ़ या रद्द करना असंभव है!

मेरे अंतिम कोड इस तरह देखा:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 

    CGRect f = self.masterTableView.frame; // The tableView the search replaces 
    CGRect s = self.searchDisplayController.searchBar.frame; 
    CGRect newFrame = CGRectMake(f.origin.x, 
           f.origin.y + s.size.height, 
           f.size.width, 
           f.size.height - s.size.height); 

    tableView.frame = newFrame; 
} 
+0

उस साथी के लिए धन्यवाद, तो आपको दोनों को कुशलतापूर्वक उपयोग करने की आवश्यकता होगी। यह मुझे पागल बना रहा था! –

+0

'कुछ फ्रेम' कैसे घोषित करें? – user2872856

+0

@ user2872856 'tableView.frame' एक सीजीआरईटी है, तो आप यह कर सकते हैं: 'सीजीआरएक्ट कुछ फ्रेम = सीजीआरएक्टमेक (सीजीएफएलएटी एक्स, सीजीएफएलएटी वाई, सीजीफ्लैट चौड़ाई, सीजीएफएलओटी ऊंचाई);' – BigHeadCreations

0

मुझे यकीन है कि मैं पूरी तरह से समझते हैं कि तुम क्या वर्णन कर रहे हैं नहीं कर रहा हूँ, यह एक स्क्रीनशॉट है करने के लिए अच्छा होगा।

ऐसा लगता है कि क्या हो रहा है UITableView स्क्रीन का आकार है और बैनर इसके नीचे 50 पिक्सल ओवरलैप कर रहा है। सभी UIView बच्चों के पास उनके सामान्य UIView माता-पिता से प्राप्त फ्रेम, सीमाएं और केंद्र गुण होते हैं।

@interface UIView(UIViewGeometry) 

// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead. 
@property(nonatomic) CGRect   frame; 

// use bounds/center and not frame if non-identity transform. if bounds dimension is odd, center may be have fractional part 
@property(nonatomic) CGRect   bounds;  // default bounds is zero origin, frame size. animatable 
@property(nonatomic) CGPoint   center;  // center is center of frame. animatable 
@property(nonatomic) CGAffineTransform transform; // default is CGAffineTransformIdentity. animatable 
// ... from UIView.h 

आप, के रूप में आप की तरह इन गुणों में हेरफेर की तरह आप बस 50 पिक्सल स्क्रीन की तुलना में छोटा सीमा समायोजित करने की आवश्यकता यह लग रहा है, और अपने नए केंद्र की गणना करने के कुछ गणित कर सकते हैं।

+0

मैंने कुछ स्क्रीनशॉट जोड़े हैं। किसी भी समय मैं खोज तालिका प्रदर्शन के लिए ज्यामिति सेट नहीं कर रहा हूं। अगर मैं यह पता लगा सकता हूं कि यह कहां करना है, तो शायद यह जवाब है ... लेकिन UISearchDisplayController की SearchResultsTableView प्रॉपर्टी केवल पढ़ने के लिए है। –

+0

SearchResultsTableView प्रॉपर्टी केवल पढ़ने के लिए है, लेकिन इसका मतलब है कि आप नियंत्रक पर हैंडल नहीं बदल सकते हैं, तो आप टेबलव्यू को स्वयं में हेरफेर करने में सक्षम होना चाहिए। – slf

+0

http://developer.apple.com/iphone/library/samplecode/TableSearch/index.html – slf

1

मैं गहरी दृश्य पदानुक्रम के लिए अनुमति देने के लिए कोड अद्यतन, लेकिन अर्द्ध पारदर्शी कवर देखने के प्रारंभिक फ्रेम अभी भी खोज बार के नीचे पूरी विंडो तक ले जाता है ।

-(void)searchDisplayController: (UISearchDisplayController*)controller 
didShowSearchResultsTableView: (UITableView*)tableView 
{ 
    if ([controller.searchBar.superview isKindOfClass: [UITableView class]]) 
    { 
     UITableView* staticTableView = (UITableView*)controller.searchBar.superview; 

     CGRect f = [tableView.superview convertRect: staticTableView.frame fromView: staticTableView.superview]; 
     CGRect s = controller.searchBar.frame; 
     CGRect newFrame = CGRectMake(f.origin.x, 
            f.origin.y + s.size.height, 
            f.size.width, 
            f.size.height - s.size.height); 

     tableView.frame = newFrame; 
    } 
}