दिलचस्प पोस्ट
क्या जावास्क्रिप्ट का यह उद्देश्य नए तरीके से बनाई गई वस्तु को संदर्भित करता है आप एक जावा सबलेट से JSON ऑब्जेक्ट कैसे वापस करते हैं पकड़ने और फिर से फेंकने के लिए सर्वश्रेष्ठ प्रथाएं .नेट अपवाद style.display = 'none' क्रोम में विकल्प टैग पर काम नहीं करता है, लेकिन यह फ़ायरफ़ॉक्स में है Normalize.css और रीसेट सीएसएस के बीच अंतर क्या है? कैसे जावास्क्रिप्ट का उपयोग कर एक माउस क्लिक अनुकरण करने के लिए? NSDate प्रारूप गलत तारीख outputting GCD क्वेरी समस्या निलंबित एकाधिक कॉलम बनाम लचीला सार तालिका के साथ एक निश्चित तालिका मैं एमएस एक्सेस डाटाबेस से टेबल नाम कैसे प्राप्त करूं? वालग्रिंड: मेमोरी अभी भी <iostream> का उपयोग कर तुच्छ कार्यक्रम के साथ पहुंच योग्य है Win32 एपीआई का उपयोग कर एक यूएसबी ड्राइव को सुरक्षित रूप से हटाएं? द्विआधारी कारक और लेबल के प्रतिशत के साथ स्टैक्ड प्रतिशत बार प्लॉट (जीजीप्लोट के साथ) जावास्क्रिप्ट में एक इनपुट टेक्स्ट वैल्यू कैसे प्राप्त करें कॉलम डेटाटाइप में बाइट और चाअर के बीच का अंतर

UITableView अनुभाग हैडर का डिफ़ॉल्ट स्क्रॉलिंग व्यवहार बदलें

मेरे पास दो वर्गों के साथ एक UITableView है यह एक साधारण तालिका दृश्य है मैं इन शीर्षकों के लिए कस्टम दृश्य बनाने के लिए viewForHeaderInSection का उपयोग कर रहा हूं। अब तक सब ठीक है.

डिफ़ॉल्ट स्क्रॉलिंग व्यवहार यह है कि जब एक खंड का सामना करना पड़ता है, तो अनुभाग हेडर एनएवी बार के नीचे लंगरता रहता है, जब तक कि अगले खंड स्क्रॉल को देखने में नहीं आता।

मेरा प्रश्न यह है: क्या मैं डिफ़ॉल्ट व्यवहार को बदल सकता हूं ताकि अनुभाग हेडर शीर्ष पर लंगर डाले न हों, बल्कि बाकी अनुभाग पंक्तियों के साथ एनएवी बार के नीचे स्क्रॉल करें?

क्या मुझसे साफ़ – साफ़ कुछ चीज़ चूक रही है?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "UITableView अनुभाग हैडर का डिफ़ॉल्ट स्क्रॉलिंग व्यवहार बदलें"

जिस तरह से मैंने इस समस्या का समाधान किया, वह contentOffset को समायोजित करने के लिए है contentOffset अनुसार contentInset करें UITableViewControllerDelegate (इस प्रकार UIScrollViewDelegate फैलता है) में:

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = 40; if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) { scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0); } else if (scrollView.contentOffset.y>=sectionHeaderHeight) { scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0); } } 

केवल यहाँ समस्या यह है कि शीर्ष पर वापस स्क्रॉल करते समय यह थोड़ा उछाल खो देता है


{नोट: "40" आपके अनुभाग 0 शीर्ष लेख की सटीक ऊंचाई होनी चाहिए। यदि आप किसी संख्या का उपयोग करते हैं जो आपके अनुभाग 0 शीर्ष ऊंचाई की ऊंचाई से अधिक है, तो आप देखेंगे कि उंगली का अनुभव प्रभावित होता है ("1000" की तरह प्रयास करें और आपको बाउंस व्यवहार को शीर्ष पर अजीब तरह का दिखना होगा)। यदि संख्या आपके अनुभाग 0 शीर्ष ऊंचाई की ऊंचाई से मेल खाती है, तो उंगली लग रहा है कि वह संपूर्ण या निकटतम सिद्ध है।}

आप शीर्ष पर शून्य पंक्तियों के साथ एक अनुभाग भी जोड़ सकते हैं और केवल पिछले अनुभाग के पाद लेख का उपयोग अगले भाग के शीर्ष लेख के रूप में कर सकते हैं।

क्या मैं यह कर रहा था, मैं इस तथ्य का फायदा उठाता हूं कि सादा शैली में यूआईटीबल वीव्स चिपचिपा शीर्षलेख और समूहित शैली में हैं। मैं शायद कम से कम एक समूह तालिका में प्लेन सेल की उपस्थिति की नकल करने के लिए एक कस्टम तालिका सेल का उपयोग करने की कोशिश करता हूं।

मैंने वास्तव में ऐसा करने की कोशिश नहीं की है, इसलिए यह काम नहीं करेगा, लेकिन यही है कि मैं क्या कर रहा हूं।

मुझे पता है कि यह देर से आता है, लेकिन मुझे निश्चित हल मिल गया है!

आप क्या करना चाहते हैं, अगर आपके पास 10 अनुभाग हैं, तो डाटासॉर रिटर्न 20 दें। अनुभाग शीर्षकों के लिए भी संख्या का उपयोग करें, और अनुभाग सामग्री के लिए अजीब संख्या। कुछ इस तरह

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (section%2 == 0) { return 0; }else { return 5; } } -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if (section%2 == 0) { return [NSString stringWithFormat:@"%i", section+1]; }else { return nil; } } 

देखा! : डी

ऐसे कई चीजें हैं जो इस समस्या को एक गैर-हैमी तरीके से हल करने के लिए आवश्यक हैं:

  1. तालिका देखें शैली को UITableViewStyleGrouped सेट करें
  2. टेबल दृश्य backgroundColor का रंग सेट करें [UIColor clearColor]
  3. प्रत्येक तालिका दृश्य सेल पर backgroundColor [UIColor clearColor] दृश्य को backgroundColor [UIColor clearColor] साथ खाली दृश्य में सेट करें backgroundColor [UIColor clearColor]
  4. यदि आवश्यक हो, तो टेबल दृश्य rowHeight उचित रूप से सेट करें, या तालिका ओवरराइड करें दृश्य: rowHeight tableView:heightForRowAtIndexPath: यदि व्यक्तिगत पंक्तियों में अलग ऊंचाई है

मूल रूप से यहां पोस्ट की गई, आईबी का उपयोग कर एक त्वरित समाधान एक ही प्रोग्राम किया जा सकता है, हालांकि काफी सरल है।

यह हासिल करने का शायद एक आसान तरीका है (आईबी के प्रयोग से):

एक UIView को अपने TableView पर खींचें, इसका शीर्षक देखने के लिए।

  1. हेडर दृश्य ऊंचाई 100px तक सेट करें
  2. तालिका दृश्य सामग्री सेट करें (शीर्ष) -100
  3. धारा हेडर अब किसी भी नियमित सेल की तरह स्क्रॉल करेंगे।

कुछ लोगों ने यह कहते हुए टिप्पणी की कि यह समाधान पहले शीर्ष लेख छुपाता है, हालांकि मैंने इस तरह के किसी भी मुद्दे पर गौर नहीं किया है। यह मेरे लिए पूरी तरह से काम करता था और यह अब तक का सरलतम समाधान था जिसे मैंने देखा है।

मैं अब तक वर्णित समाधानों से खुश नहीं था, इसलिए मैंने उन्हें गठबंधन करने की कोशिश की। परिणाम निम्न कोड है, जो @वाल्फ और @ साइसफ्री से प्रेरित है। यह मेरे लिए काम करता है क्योंकि मेरे पास कोई वास्तविक तालिका दृश्य शीर्षक नहीं है यदि आपके पास पहले से ही एक टेबल दृश्य शीर्षक है, तो आपको ऊंचाई समायोजित करनी पड़ सकती है

 // Set the edge inset self.tableView.contentInset = UIEdgeInsetsMake(-23.0f, 0, 0, 0); // Add a transparent UIView with the height of the section header (ARC enabled) [self.tableView setTableHeaderView:[[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 23.0f)]]; 

बस तालिका दृश्य शैली बदलें:

 self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped]; 

UITableViewStyle प्रलेखन :

UITableViewStylePlain- एक सादे तालिका दृश्य किसी भी अनुभाग हेडर या पाद लेख को इनलाइन विभाजक के रूप में प्रदर्शित किया जाता है और जब तालिका दृश्य स्क्रॉल किया जाता है।

UITableViewStyleGrouped- तालिका दृश्य जिसका अनुभाग पंक्तियों के विशिष्ट समूह प्रस्तुत करते हैं अनुभाग शीर्षक और पाद लेख फ़्लोट नहीं करते हैं।

अपनी तालिका दृश्य शैली बदलें:

 self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped]; 

UITableView के लिए एप्पल दस्तावेज़ के अनुसार:

UITableViewStylePlain- एक सादे तालिका दृश्य किसी भी अनुभाग हेडर या पाद लेख को इनलाइन विभाजक के रूप में प्रदर्शित किया जाता है और जब तालिका दृश्य स्क्रॉल किया जाता है।

UITableViewStyleGrouped- तालिका दृश्य जिसका अनुभाग पंक्तियों के विशिष्ट समूह प्रस्तुत करते हैं अनुभाग शीर्षक और पाद लेख फ़्लोट नहीं करते हैं। आशा है कि यह छोटा परिवर्तन आपकी मदद करेगा ..

अनुभाग देखें में हेडर के समान ऊंचाई के साथ एक पारदर्शी दृश्य के साथ तालिका के हेडरव्यू सेट करें साथ ही तालिका में एई फ़्रेम के साथ -हाइट भी शुरू करें

 self.tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, - height, 300, 400)]; UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, width, height)] autorelease]; [self.tableView setTableHeaderView:headerView]; 

मुझे एक वैकल्पिक समाधान मिला, प्रत्येक अनुभाग के पहले कक्ष का उपयोग करने के बजाय वास्तविक हेडर अनुभाग, यह समाधान इतना साफ नहीं दिखता है, लेकिन इतना अच्छा काम करता है, आप अपने हेडर अनुभाग के लिए एक परिभाषित प्रोटोटाइप सेल का उपयोग कर सकते हैं, और विधि सेलफ़ोरआरटीएंडएंडएपैथ में indexPath.row == 0 के लिए पूछें, यदि सही है, तो हेडर अनुभाग प्रोटोटाइप सेल का उपयोग करें, अन्यथा अपना डिफ़ॉल्ट प्रोटोटाइप सेल का उपयोग करें।

समूहीकृत तालिकादृश्य शैली चुनें

स्टोरीबोर्ड में अपने टेबल व्यू के एट्रिब्यूट इंस्पेक्टर से समूहीकृत तालिका दृश्य शैली चुनें।

अब जब समूहीकृत शैली आईओएस 7 (समानता और पृष्ठभूमि के संदर्भ में) में सादे शैली के समान दिखती है, तो हमारे लिए सबसे आसान और सबसे आसान (यानी कम से कम हैकी) फिक्स सिर्फ टेबल व्यू की शैली को समूहित करने के लिए बदलना था सामग्री के साथ जैकिंगइन्सेट्स हमेशा एक समस्या थी जब हम शीर्ष पर स्क्रॉल-दूर एनएवी बार को एकीकृत करते थे समूहीकृत तालिका व्यू शैली के साथ, यह बिल्कुल वही दिखता है (हमारे कक्षों के साथ) और अनुभाग हेडर स्थिर रहते हैं कोई स्क्रॉल अजीबता नहीं

अपने तालिका दृश्य में नकारात्मक इनसेट निरुपित करें। यदि आपके पास 22px उच्च अनुभाग हेडर हैं, और आप उन्हें चिपचिपा नहीं करना चाहते हैं, तो आप पुनः लोड होने के बाद डेटा जोड़ सकते हैं:

 self.tableView.contentInset = UIEdgeInsetsMake(-22, 0, 0, 0); self.tableView.contentSize = CGSizeMake(self.tableView.contentSize.width, self.tableView.contentSize.height+22); 

मेरे लिए आकर्षण की तरह काम करता है साथ ही अनुभाग पादर्स के लिए काम करता है, बस इसके बजाय नीचे दिए गए नकारात्मक इन्सेट को असाइन करें।

मैं टेबल को स्क्रॉल व्यू में जोड़ता हूं और यह अच्छी तरह से काम करता है

मेरा जवाब यहां देखें यह किसी भी हैक्स के बिना गैर-फ्लोटिंग अनुभाग हेडर को लागू करने का सबसे आसान तरीका है।

@ लोको माइक का जवाब सबसे अच्छा मेरी मेज व्यू, लेकिन यह भी तोड़ दिया जब फुटरर्स का उपयोग करते हुए भी। इसलिए, हेडर और पादलेख का उपयोग करते समय यह सही समाधान है:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return (self.sections.count + 1) * 3; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (section % 3 != 1) { return 0; } section = section / 3; ... } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if (section % 3 != 0) { return nil; } section = section / 3; ... } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (section % 3 != 0) { return 0; } section = section / 3; ... } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { if (section % 3 != 2) { return 0; } section = section / 3; ... } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (section % 3 != 0) { return nil; } section = section / 3; ... } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { if (section % 3 != 2) { return nil; } section = section / 3; ... } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { int section = indexPath.section; section = section / 3; ... } 

अपनी तालिका दृश्य शैली बदलें:

 self.tableview = [[UITableView alloc] initwithFrame:frame style:UITableViewStyleGrouped]; 

UITableView के लिए एप्पल दस्तावेज़ के अनुसार:

 UITableViewStylePlain- A plain table view. Any section headers or footers are displayed as inline separators and float when the table view is scrolled. UITableViewStyleGrouped- A table view whose sections present distinct groups of rows. The section headers and footers do not float. Hope this small change will help you .. 

@ वुल्फ उत्तर का स्विफ्ट संस्करण, जो महान काम करता है!

 func scrollViewDidScroll(scrollView: UIScrollView) { let sectionHeight: CGFloat = 80 if scrollView.contentOffset.y <= sectionHeight { scrollView.contentInset = UIEdgeInsetsMake( -scrollView.contentOffset.y, 0, 0, 0) }else if scrollView.contentOffset.y >= sectionHeight { scrollView.contentInset = UIEdgeInsetsMake(-sectionHeight, 0, 0, 0) } } 

मैंने सीखा है कि सिर्फ tableHeaderView संपत्ति को स्थापित करना है, यानी:

  tableView.tableHeaderView = customView; 

और बस।