मैंने सही डेलीगेट और डेटासोर्स लिंकेज के साथ टेबलव्यू सेट किया है .. पुनः लोड करने की विधि डेटा स्रोत और डेलिगेट को छोड़कर कॉल करती है viewForHeaderInSection:
।
ऐसा क्यों हैं?
sectionHeaderHeight
?
मैंने सही डेलीगेट और डेटासोर्स लिंकेज के साथ टेबलव्यू सेट किया है .. पुनः लोड करने की विधि डेटा स्रोत और डेलिगेट को छोड़कर कॉल करती है viewForHeaderInSection:
।
ऐसा क्यों हैं?
sectionHeaderHeight
?
जवाबों:
tableView:viewForHeaderInSection:
आवश्यकता है कि आप भी लागू का उपयोग करें tableView:heightForHeaderInSection:
। यह शीर्ष लेख के लिए एक उपयुक्त गैर-शून्य ऊंचाई वापस करना चाहिए। यह भी सुनिश्चित करें कि आप भी लागू नहीं करते हैं tableView:titleForHeaderInSection:
। आपको केवल एक या दूसरे ( viewForHeader
या titleForHeader
) का उपयोग करना चाहिए ।
numberOfSections
।
titleForHeaderInSection:
और viewForHeaderInSection:
उत्तरार्द्ध से लौटाया गया दृश्य उप-वर्ग है UITableViewHeaderFooterView
तो इसका textLabel.text
स्वचालित रूप से titleForHeaderInSection:
स्ट्रिंग के ऑल-कैप संस्करण में सेट हो जाता है । इस व्यवहार को रोकने titleForHeaderInSection:
के लिए, विरासत के बजाय कस्टम लेबल लागू न करें या उसका उपयोग न करें textLabel
।
चाल यह है कि वे दो विधियां अलग-अलग UITableView
प्रोटोकॉल से संबंधित हैं : tableView:titleForHeaderInSection:
एक UITableViewDataSource
प्रोटोकॉल विधि है, जहां से tableView:viewForHeaderInSection
संबंधित है UITableViewDelegate
।
इसका मत:
यदि आप विधियों को लागू करते हैं, लेकिन केवल अपने लिए ही असाइन
dataSource
करते हैं UITableView
, तो आपके
tableView:viewForHeaderInSection
कार्यान्वयन को नजरअंदाज कर दिया जाएगा।
tableView:viewForHeaderInSection
एक उच्च प्राथमिकता है। आप तरीकों में से दोनों को लागू करने और दोनों के रूप में अपने आप को असाइन करते हैं
dataSource
और delegate
के लिए UITableView
, आप के लिए खंड हेडर विचारों वापस आ जाएगी, लेकिन अपने
tableView:titleForHeaderInSection:
नजरअंदाज कर दिया जाएगा।
मैंने हटाने की कोशिश भी की है tableView:heightForHeaderInSection:
; यह ठीक काम किया और ऊपर की प्रक्रियाओं को प्रभावित नहीं किया। लेकिन दस्तावेज़ीकरण कहता है कि tableView:viewForHeaderInSection
सही ढंग से काम करने के लिए यह आवश्यक है; इसलिए यह सुरक्षित है कि इसे लागू करना बुद्धिमानी है।
UITableViewDelegate
करने के लिए self
, क्योंकि मैंने सोचा, कि tableView:viewForHeaderInSection
एक है UITableViewDataSource
विधि। धन्यवाद!
titleForHeader
जिसमें एक आंतरिक आकार है। आंतरिक आकार की गणना फ़ॉन्ट परिवार और आकार के आधार पर की जाती है।
@rmaddy नियम, दो बार misstated है: वास्तव में, tableView:viewForHeaderInSection:
करता नहीं की आवश्यकता होती है कि आप भी लागू tableView:heightForHeaderInSection:
, और यह भी यह दोनों फोन करने के लिए बिल्कुल ठीक है titleForHeader
और viewForHeader
। मैं केवल रिकॉर्ड के लिए सही ढंग से नियम बताऊंगा:
नियम केवल यह है कि viewForHeader
जब तक आप किसी तरह हेडर को ऊंचाई नहीं देते हैं, तब तक इसे नहीं बुलाया जाएगा। आप इसे तीन तरीकों से किसी भी संयोजन में कर सकते हैं:
लागू करें tableView:heightForHeaderInSection:
।
तालिका सेट करें sectionHeaderHeight
।
कॉल titleForHeader
(यह किसी भी तरह हेडर को डिफ़ॉल्ट ऊंचाई देता है यदि यह अन्यथा नहीं है)।
यदि आप उन चीजों में से कोई भी नहीं करते हैं, तो आपके पास कोई हेडर viewForHeader
नहीं होगा और आपको बुलाया नहीं जाएगा। ऐसा इसलिए है क्योंकि ऊंचाई के बिना, रनटाइम को पता नहीं चलेगा कि दृश्य का आकार कैसे बदलना है, इसलिए यह एक के लिए पूछने के लिए परेशान नहीं करता है।
tableView:viewForHeaderInSection:
: "यह विधि केवल तभी सही ढंग से काम करती है जब tableView:heightForHeaderInSection:
इसे लागू किया जाता है।"
titleForHeaderInSection
और viewForHeaderInSection
? तालिका दृश्य केवल दो में से एक को कॉल करेगा (मैं भूल जाता हूं जो इस समय पूर्वता प्राप्त करता है)।
viewForHeader
कहा जाता है । मैंने ऐसा किया है, जहां मुझे बुलाया गया था और हेडर ने ठीक दिखाया, एक दिन तक, मेरी तरफ से कोई बदलाव नहीं हुआ, उन्होंने नहीं किया । कि जब मैंने यह पता लगाने के लिए प्रयोग करना शुरू किया कि न्यूनतम आवश्यकताओं को क्या कहा जाता है। और अब मुझे पता है। और अब तो तुम करते हो viewForHeader
viewForHeader
देने estimatedSectionHeaderHeight
और sectionHeaderHeight
मूल्यों ने मेरी समस्या तय कर दी। जैसे,
self.tableView.estimatedSectionHeaderHeight = 100
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
असभ्य जवाब से दूर जा रहा है, मैं हेडर दृश्य को छिपाने की कोशिश कर रहा था और "tableView: heightForHeaderInSection" के लिए 0.0f लौट रहा था और एक 0 ऊँचाई से देख रहा था tableView:viewForHeaderInSection
।
से बदलने के बाद return 1.0f
करने के लिए return 0.0f
में tableView:heightForHeaderInSection
, प्रतिनिधि विधि tableView:viewForHeaderInSection
वास्तव में बुलाया गया था।
"TableView: heightForHeaderInSection" का उपयोग किए बिना मेरा वांछित प्रभाव काम करता है; लेकिन यह उन लोगों के लिए उपयोगी हो सकता है जिनके पास "tableView: heightForHeaderInSection" डेलिगेट विधि नामक एक समस्या हो रही है।
आपको tableView:heightForHeaderInSection:
शीर्ष लेख> 0 के लिए ऊंचाई को लागू करना और सेट करना चाहिए ।
यह प्रतिनिधि विधि विधि के साथ जाती है viewForHeaderInSection:
।
आशा है कि ये आपकी मदद करेगा।
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 40;
}
यह संक्षेप में ध्यान देने योग्य है कि यदि आपके tableView:heightForHeaderInSection:
रिटर्न का कार्यान्वयन UITableViewAutomaticDimension
, तो tableView:viewForHeaderInSection:
नहीं कहा जाएगा।
UITableViewAutomaticDimension
मानता है कि एक मानक UITableViewHeaderFooterView
का उपयोग किया जाएगा जो प्रतिनिधि विधि के साथ आबादी है tableView:titleForHeaderInSection:
।
में टिप्पणियों से UITableView.h
:
इस मान से
tableView:heightForHeaderInSection:
याtableView:heightForFooterInSection:
उस ऊँचाई पर लौटना जो मान से लौटाए गए मान पर फिट बैठता हैtableView:titleForHeaderInSection:
याtableView:titleForFooterInSection:
यदि शीर्षक शून्य नहीं है।
estimatedSectionHeaderHeight
कुछ मूल्य पर सेट होते हैं, tableView:viewForHeaderInSection
तो कहा जाएगा (इसी तरह से पंक्तियों के लिए ऑटो आयाम कैसे काम करता है)
मैं सिर्फ हेडर के साथ एक समस्या आईओएस 7.1 के लिए नहीं दिखा रहा हूं, लेकिन बाद में रिलीज के साथ ठीक काम कर रहा हूं, स्पष्ट रूप से 8.1 और 8.4 के साथ।
ठीक उसी कोड के लिए, 7.1 किसी भी सेक्शन हेडर के प्रतिनिधि के तरीकों को बिल्कुल नहीं बुला रहा था , जिसमें शामिल हैं: tableView:heightForHeaderInSection:
और tableView:viewForHeaderInSection:
।
प्रयोग के बाद, मैंने पाया कि मेरे बनाए हेडर से इस लाइन को हटाने से viewDidLoad
7.1 के लिए फिर से दिखाई देता है और मैंने परीक्षण किए गए अन्य संस्करणों को प्रभावित नहीं किया है:
// _Removing_ this line _fixed_ headers on 7.1
self.tableView.estimatedSectionHeaderHeight = 80;
... तो, वहाँ 7.1 के लिए किसी तरह का संघर्ष लगता है, कम से कम।
एक ही समस्या मेरे साथ हुई, लेकिन जैसा कि मैं xCode 9 से स्वचालित ऊंचाई गणना का उपयोग कर रहा था , मैं ऊपर बताए अनुसार कोई स्पष्ट ऊंचाई मान नहीं दे सकता। कुछ प्रयोग के बाद मुझे समाधान मिला , हमें इस विधि को ओवरराइड करना होगा,
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForHeaderInSection:(NSInteger)section
{
return 44.0f;
}
हालांकि मैंने दोनों विकल्पों की जाँच की है
से स्टोरीबोर्ड सेब कहते हैं, लेकिन अभी भी मैं इस अजीब त्रुटि मिली है।
कृपया ध्यान दें : यह त्रुटि केवल IOS-10 संस्करण पर दिखाई गई थी IOS-11 संस्करण पर नहीं । शायद यह xCode से बग है। धन्यवाद
यहाँ मैंने क्या पाया है ( स्विफ्ट 4 ) ( इस सवाल के लिए एक टिप्पणी पर धन्यवाद )
क्या मैंने titleForHeaderInSection या viewForHeaderInSection का उपयोग किया है - यह नहीं था कि टेबलव्यू स्क्रॉल किए जाने पर उन्हें बुलाया नहीं जा रहा था और नई कोशिकाओं को लोड किया जा रहा था, लेकिन हेडर व्यू के टेक्स्टलेबेल के लिए मेरे द्वारा किए गए कोई भी फ़ॉन्ट केवल लोड पर शुरू में दिखाई दे रहे थे। , और नहीं के रूप में तालिका स्क्रॉल किया गया था।
यह फिक्स था ।DisplayHeaderView:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let header = view as? UITableViewHeaderFooterView {
header.textLabel?.font = UIFont(name: yourFont, size: 42)
}
}
मेरे मामले में मैंने इस तरह UITableviewCell
से सेल का उपयोग करके और वापस लौटकर हेडर व्यू बनाया हैviewForHeaderInSection
return cell
इसे बदल दिया गया
return cell.contentView
मेरे लिए काम किया।
मेरे मामले में
viewForHeaderInSection
दूर के एक व्युत्पन्न वर्ग में लागू किया गया था जो सुपरक्लास में डेज़ी करने के लिए परेशान नहीं था।
viewForHeaderInSection
दो कारणों में से एक को क्यों नहीं बुलाया जाता है:
या तो आपने अपना सेट अप नहीं किया UITableViewDelegate
, या आपने अपना UITableViewDelegate
गलत तरीके से सेट किया ।
मेरे मामले में यह कारण था कि मैंने लागू नहीं किया:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
मैंने अपनी स्विफ्ट 3 परियोजना में एक स्विफ्ट 2 परियोजना से निम्नलिखित दो विधियों को काटा और पेस्ट किया था, जिन्हें कभी नहीं बुलाया गया था क्योंकि स्विफ्ट 3 में इन विधियों का पहला पैरामीटर नाम से पहले "-" होना चाहिए।
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44.0
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: B2BTrolleyHeaderFooterView.reuseIdentifier) as! B2BTrolleyHeaderFooterView
return headerView
}
heightForHeaderInSection:
लागू किया?