2009-07-03 17 views
25

मुझे UISearchBiew के साथ UVearchBiew को tableViews.tableHeaderView के रूप में मिला है। 3.0 में नए Mail.app, Notes.app, आदि की तरह। मैं सर्चबार को तब तक छिपाना चाहता हूं जब तक कि उपयोगकर्ता इसे अपनी दृष्टि में नहीं खींचता।स्क्रॉल UITableView ताकि हेडर दिखाई नहीं दे रहा है

मेरा प्रयास केवल तभी काम करता है जब तालिका में कुछ आइटम होते हैं, ताकि तालिका दृश्य वास्तव में स्क्रॉल करना चाहता हो। मैं loadView में इस फोन:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self._tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 

फिर भी ऐसा लगता है कि एप्पल इस तरह के एक serachbar अलग तरह से संभालती है। सर्चबार को बाहर निकालने के बाद यह अब टेबलकेल्स तक सीमित नहीं लग रहा है (Notes.app में, Mail.app में नहीं)।

लेकिन शायद ऐप्पल के पास उस नए 3.0 व्यवहार के लिए एक अलग विधि है, और मुझे बस यह नहीं मिल रहा है?

+0

चेकआउट 'UIViewController' के लिए नई प्रॉपर्टी की जोड़ी। [Https://developer.apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1](https://developer। apple.com/library/prerelease/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1) –

उत्तर

33

हो सकता है कि आप इसे इस तरह से कोशिश कर सकते हैं ...

[self.tableView setContentOffset:CGPointMake(0,40)]; 
+0

बेकार ढंग से काम करता है। – OlivaresF

+1

तालिका दृश्य पुनः लोड होने के बाद हर बार ऐसा करने की आवश्यकता है। [self.tableView reloadData]; – Thiru

+9

काम नहीं करता है जब पंक्तियों की संख्या स्क्रीन पर फिट पंक्तियों की कुल संख्या से कम होती है। इस परिदृश्य के लिए कोई ज्ञात कामकाज? – Zorayr

25

मेरे लिए बहुत काम किया। मैंने निम्नलिखित का उपयोग किया:

[self.tableView setContentOffset:CGPointMake(0, self.searchDisplayController.searchBar.frame.size.height) animated:NO]; 

खोज बार की ऊंचाई पूछने के लिए।

+1

लवली और सरल, हालांकि मैंने एनिमेटेड जोड़ा: YES पैरामीटर इसलिए चीज़ को देखने में सुधार करें। – PKCLsoft

+0

बिल्कुल सही! बस इसे ViewWillAppear में जोड़ा और मुझे वह परिणाम मिला जो मैं ढूंढ रहा था। – anasaitali

10

यह एक आप iPod.app के रूप में ठीक उसी व्यवहार हो जाता है:

- (void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 

CGFloat searchBarHeight = CGRectGetHeight([[[self searchDisplayController] searchBar] frame]); 
if ([[self tableView] contentOffset].y < searchBarHeight) 
    [[self tableView] setContentOffset:CGPointMake(0, searchBarHeight)]; 
} 
3

यह मेरे लिए काम करता है।

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.bounces = YES; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self.tableView setContentOffset:CGPointMake(0, 44)]; 
} 
-2

मैं एक तरह से यह इस तरह से कर रही है जैसे:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    // Hide the table view header by default. 
    NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

इस तरह से आप वास्तव में कैसे लंबा आपके शीर्षक है के बारे में चिंता करने की जरूरत नहीं है। यह सिर्फ काम करता है!

+1

यदि समाधान दृश्य पंक्तियों को लोड नहीं किया गया है या शून्य पंक्तियां हैं तो समाधान ऐप को क्रैश करता है। – Zorayr

+0

ओह गॉचा। टिप्पणी Zorayr के लिए धन्यवाद – Caborca87

0

मैं शीर्ष पर तो setContentOffset0 करने के लिए पहले से स्क्रॉल करने के लिए किया था, तब Searchbar दिखेंगे:

self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false) 
self.tableView.setContentOffset(CGPointMake(0, 0), animated: false) 
संबंधित मुद्दे