ios - क्या ऑटो लेआउट का उपयोग करके डायनामिक टेबल व्यू सेक्शन हेडर ऊंचाई प्राप्त करना संभव है?
uitableview ios8 (6)
उसी अंक में अटक गया, जहां हेडर शून्य ऊँचाई का हो रहा था और जब तक कि मैं
heighForHeaderInSection
लिए प्रतिनिधि में एक निश्चित ऊंचाई प्रदान नहीं करता।
बहुत सारे समाधानों की कोशिश की, जिनमें शामिल हैं
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;
लेकिन कुछ भी काम नहीं आया। मेरे सेल उचित ऑटोलैयूट का भी उपयोग कर रहे थे। पंक्तियाँ निम्न कोड का उपयोग करके गतिशील रूप से अपनी ऊंचाई बदल रही थीं, लेकिन अनुभाग हेडर नहीं थे।
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Recalculates height
tableView.beginUpdates()
tableView.endUpdates()
}
यह फिक्स बेहद सरल और अजीब है, लेकिन मुझे
estimatedSectionHeaderHeight
के
estimatedSectionHeaderHeight
1 लाइन कोड के बजाय डेलिगेट के तरीकों को लागू करना पड़ा है।
sectionHeaderHeight
और
sectionHeaderHeight
जो मेरे केस के लिए निम्नानुसार है।
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 73`
IOS 8 में नया, आप केवल अनुमानित पंक्ति ऊंचाई सेट करके 100% डायनेमिक टेबल व्यू सेल प्राप्त कर सकते हैं, फिर ऑटो लेआउट का उपयोग करके सेल में अपने तत्वों को लेआउट कर सकते हैं। यदि सामग्री ऊंचाई में बढ़ती है, तो सेल भी ऊंचाई में बढ़ेगी। यह बेहद उपयोगी है, और मैं सोच रहा हूं कि क्या टेबल हेड में सेक्शन हेडर के लिए एक ही उपलब्धि पूरी की जा सकती है?
एक, उदाहरण के लिए,
tableView:viewForHeaderInSection:
में एक
UIView
बनाएं
tableView:viewForHeaderInSection:
एक
UILabel
tableView:viewForHeaderInSection:
जोड़ें, दृश्य के खिलाफ लेबल के लिए ऑटो लेआउट बाधाओं को निर्दिष्ट करें, और
tableView:viewForHeaderInSection:
की सामग्री को लागू किए बिना लेबल की सामग्री को फिट करने के लिए ऊंचाई में वृद्धि को देखें
tableView:heightForHeaderInSection:
viewForHeaderInSection
लिए दस्तावेज़ में कहा गया है: "यह विधि केवल तभी सही ढंग से काम करती है जब
viewForHeaderInSection
:
viewForHeaderInSection
: को भी लागू किया जाता है।"
मैंने यह नहीं सुना है कि iOS 8 के लिए कुछ भी बदल गया है।
यदि कोई ऐसा नहीं कर सकता है, तो इस व्यवहार की नकल करने का सबसे अच्छा तरीका क्या है?
मेरे मामले में:
- प्रोग्रामेटिक रूप से सेट न करें ।
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
।
-
स्टोरीबोर्ड में काम नहीं किया गया ।
-
ओवरराइड
heightForHeaderInSection
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableViewAutomaticDimension }
परीक्षण पर्यावरण:
- मैक ओएस 10.13.4
- XCode संस्करण 9.4.1
- सिम्युलेटर iPhone 8 प्लस
मैंने कोशिश की
self.tableView.estimatedRowHeight = 135
self.tableView.rowHeight = UITableViewAutomaticDimension`
लेकिन यह मल्टीलाइन लेबल के साथ सही ढंग से हेडर का आकार नहीं देता था। मेरी समस्या को हल करने के लिए इसे जोड़ा गया:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
return 73
}
यह आपके टेबल व्यू पर
estimatedSectionHeaderHeight
SHHHHHHHH की स्थापना (या लौटकर) करके पूरा किया जा सकता है।
यदि आपका अनुभाग हेडर
estimatedSectionHeaderHeight
सेलहेयरहाइट सेट करने के बाद आपकी कोशिकाओं को ओवरलैप कर रहा
estimatedSectionHeaderHeight
, तो सुनिश्चित करें कि आप एक
estimatedRowHeight
का उपयोग कर रहे हैं।
(मैं इस जवाब को जोड़ रहा हूं क्योंकि दूसरे पैराग्राफ में एक मुद्दे का जवाब है जो सभी टिप्पणियों के माध्यम से पढ़ने के बाद पाया जा सकता है जो कुछ याद कर सकते हैं।)
हां, यह मेरे लिए काम करता है। मुझे नीचे के रूप में अधिक परिवर्तन करने होंगे:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label = UILabel()
label.numberOfLines = 0
label.text = my own text
return label
}
स्विफ्ट 4+
काम करना (100% का परीक्षण)
यदि आपको सामग्री के आधार पर गतिशील ऊँचाई के साथ-साथ दोनों खंडों की आवश्यकता है तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं:
ViewDidLoad () पर यह पंक्तियाँ लिखें:
self.globalTableView.estimatedRowHeight = 20
self.globalTableView.rowHeight = UITableView.automaticDimension
self.globalTableView.sectionHeaderHeight = UITableView.automaticDimension
self.globalTableView.estimatedSectionHeaderHeight = 25;
अब हमने UITableView प्रतिनिधि विधियों का उपयोग करके पंक्ति की ऊँचाई और अनुभाग ऊँचाई निर्धारित की है:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableView.automaticDimension
}