Edgesforextendedlayout uitableview पृष्ठभूमि


UITableView और UICollectionView में चिकना स्क्रॉलिंग के रूप में अधिकांश आईओएस डेवलपर्स जानते हैं कि मोबाइल एप के निर्माण में डेटा के सेट प्रदर्शित करना एक आम काम है। सेब एसडीके दो घटकों को खरोंच से सब कुछ लागू करने के बिना इस तरह के काम को पूरा करने में मदद करने के लिए प्रदान करता है: एक तालिका दृश्य (UITableView) और संग्रह दृश्य (UICollectionView) तालिका दृश्य और संग्रह दृश्य दोनों को स्क्रॉल किया जा सकता है जो डेटा के सेट सेट का समर्थन करने के लिए डिज़ाइन किया गया है हालांकि, जब बहुत अधिक मात्रा में डेटा प्रदर्शित होता है, तो यह पूरी तरह से चिकना स्क्रॉल हासिल करने के लिए बहुत मुश्किल हो सकता है। यह आदर्श नहीं है क्योंकि यह नकारात्मक अनुभव उपयोगकर्ता अनुभव को प्रभावित करता है। कैपिटल वन मोबाइल ऐप के लिए आईओएस देव टीम के सदस्य के रूप में, Ive को तालिका के विचारों और संकलन दृश्यों के साथ प्रयोग करने का मौका मिला, इस पोस्ट में स्क्रॉल करने योग्य डेटा की बड़ी मात्रा में प्रदर्शित होने में मेरा व्यक्तिगत अनुभव दर्शाया गया है। इसमें, उपर्युक्त एसडीके घटक के प्रदर्शन को अनुकूलित करने के लिए सबसे महत्वपूर्ण सुझावों की अच्छी समीक्षा करें। यह कदम बहुत सहज स्क्रॉलिंग अनुभव प्राप्त करने के लिए सर्वोपरि है। ध्यान दें कि निम्न बिंदुओं में से अधिकांश UITableView और UICollectionView दोनों के लिए लागू होते हैं क्योंकि वे हुड व्यवहार के तहत उनकी एक अच्छी मात्रा साझा करते हैं। कुछ बिंदुओं को यूआईकॉलप्लेव्यू के लिए विशिष्ट है, क्योंकि यह दृश्य डेवलपर के कंधों पर अतिरिक्त लेआउट विवरण रखता है। चलो ऊपर उल्लिखित घटकों के एक त्वरित अवलोकन के साथ शुरू करते हैं। UITableView को पंक्तियों के अनुक्रम के रूप में दृश्य दिखाने के लिए ऑप्टिमाइज़ किया गया है चूंकि लेआउट पूर्वनिर्धारित है, इसलिए एसडीके घटक अधिकांश लेआउट का ध्यान रखता है और प्रतिनिधियों को प्रदान करता है जो ज्यादातर सेल सामग्री प्रदर्शित करने पर केंद्रित होते हैं। UICollectionView दूसरी तरफ, अधिकतम लचीलापन प्रदान करता है क्योंकि लेआउट पूरी तरह से अनुकूलन योग्य है। हालांकि, संग्रह दृश्य में लचीलेपन के बारे में अतिरिक्त जानकारी का ध्यान रखने की लागत पर आता है कि लेआउट को कैसे प्रदर्शन किया जाना चाहिए। युक्तियाँ सामान्य दोनों UITableView और UICollectionView नोट: मैं अपने कोड स्निपेट्स के लिए UITableView का उपयोग करने जा रहा हूँ। लेकिन समान अवधारणाओं को भी यूआईसीलाप्लेव्यू पर लागू होता है सेल रेन्डरिंग एक महत्वपूर्ण कार्य है UITableView और UITableViewCell के बीच मुख्य इंटरैक्शन निम्नलिखित घटनाओं द्वारा वर्णित किया जा सकता है: सभी उपरोक्त घटनाओं के लिए, तालिका दृश्य इंडेक्स (पंक्ति) को पारित कर रहा है जिसके लिए इंटरैक्शन हो रहा है। UITableViewCell जीवन चक्र का एक दृश्य है: सबसे पहले, तालिका दृश्य (: cellForRowAt :) विधि जितनी जल्दी संभव होनी चाहिए। इस पद्धति को हर बार एक सेल को प्रदर्शित करने की आवश्यकता होती है। यह तेज़ी से निष्पादित करता है, तालिका दृश्य को सरल स्क्रॉल करना होगा। कुछ चीजें हैं जो हम यह सुनिश्चित करने के लिए कर सकते हैं कि हम जितनी जल्दी हो सके सेल को प्रस्तुत करें। एपल्स दस्तावेज से लिया गया एक सेल प्रस्तुत करने के लिए मूल कोड निम्न है: पुन: उपयोग किया जाने वाला सेल इंस्टेंस ले जाने के बाद (dequeueReusableCell (withIdentifier: for :)), हमें इसकी गुणों को आवश्यक मान निर्दिष्ट करके कॉन्फ़िगर करना होगा । आइए देखें कि हम कैसे जल्दी से अपने कोड को निष्पादित कर सकते हैं। कक्षों के लिए देखें मॉडल को परिभाषित करें एक तरीका है कि सभी गुणों को हम दिखाना चाहिए जो आसानी से उपलब्ध हो और उनको उचित सेल समकक्ष के लिए प्रदान करें इसे प्राप्त करने के लिए, हम एमवीवीएम पैटर्न का लाभ उठा सकते हैं। मान लीजिए हमें अपने टेबल व्यू में उपयोगकर्ताओं का एक समूह प्रदर्शित करने की आवश्यकता है। हम उपयोगकर्ता के लिए आदर्श को परिभाषित कर सकते हैं: उपयोगकर्ता के लिए एक दृश्य मॉडल को परिभाषित करना सरल है: डेटा को एसिंक्रोनस और कैश व्यू मॉडल प्राप्त करें अब जब हमने हमारे मॉडल और दृश्य मॉडल को परिभाषित किया है, तो उन्हें काम करने दें। हम डेटा प्राप्त करने जा रहे हैं उपयोगकर्ताओं के लिए एक वेब सेवा के माध्यम से बेशक, हम सबसे अच्छा उपयोगकर्ता अनुभव संभव लागू करना चाहते हैं। इसलिए, हम निम्न का ध्यान रखेंगे: डेटा प्राप्त करते समय मुख्य थ्रेड को अवरुद्ध करने से बचें। डेटा को पुनर्प्राप्त करने के ठीक बाद टेबल दृश्य को अपडेट करना इसका मतलब है कि हम डेटा को अतुल्यकालिक रूप से लाएंगे। हम निम्न कार्य स्निपेट में दिखाए गए अनुसार अतुल्यकालिक रूप से डेटा को प्राप्त कर सकते हैं और निम्न दृश्य के रूप में, मॉडल और दृश्य मॉडल दोनों से अलग होकर लाने वाले तर्क को बनाए रखने के लिए हम एक विशेष नियंत्रक के माध्यम से यह कार्य करेंगे: हम उपरोक्त स्निपेट का इस्तेमाल उपयोगकर्ताओं के डेटा को कुछ अलग-अलग तरीकों से प्राप्त करने के लिए कर सकते हैं: केवल जब तालिका को लोड करते समय पहली बार देखने के लिए इसे दृश्यदर्शी में डालकर ()। हर बार तालिका दृश्य प्रदर्शित किया जाता है, इसे देखने में डालकर (WillAppear)। उपयोगकर्ता की मांग पर (उदाहरण के लिए, पुल-डाउन-टू-रिफ्रेश के माध्यम से), इसे विधि कॉल में डालकर डेटा ताज़ा करने का ध्यान रखेगा। यह विकल्प इस बात पर निर्भर करता है कि बैकएंड पर डाटा कितनी बार बदल सकता है यदि डेटा ज्यादातर स्थिर है या अक्सर बदल नहीं होता तो पहला विकल्प बेहतर होता है अन्यथा, हमें दूसरे के लिए चुनना चाहिए। छवियों को असिंक्रोनस लोड करें और उन्हें कैश करें हमारे सेल के लिए छवियों को लोड करना बहुत सामान्य है। चूंकि सर्वश्रेष्ठ स्क्रॉलिंग प्रदर्शन संभव होने की कोशिश कर रहे थे, इसलिए हम निश्चित रूप से छवियों को लाने के लिए मुख्य थ्रेड को ब्लॉक नहीं करना चाहते। URL सेशन के आस-पास एक साधारण आवरण बनाने के द्वारा असीमित रूप से छवियों को लोड करने से बचने का एक आसान तरीका: यह हमें एक पृष्ठभूमि थ्रेड का उपयोग करके प्रत्येक छवि को प्राप्त करने देता है और आवश्यक डेटा उपलब्ध होने के बाद UI को अपडेट कर देता है। हम छवियों को कैशिंग करके और भी आगे अपने प्रदर्शन में सुधार कर सकते हैं। अगर हम बिना अवांछित छवि डाउनलोड करने और खुद को कैशिंग लिखना चाहते हैं - या नहीं कर सकते हैं - हम SDWebImage या AlamofireImage जैसे पुस्तकालयों का लाभ ले सकते हैं। ये लाइब्रेरीएं प्रदान करती हैं कि कार्यक्षमता आउट-द-द-बॉक्स की तलाश कर रही थी। सेल को अनुकूलित करें कैश्ड दृश्य मॉडल का पूरी तरह से लाभ उठाने के लिए, हम यूज़र सेल को उप-क्लासिंग करके इसे अनुकूलित कर सकते हैं (संग्रह दृश्यों के लिए UITableViewCell से तालिका दृश्यों के लिए और UICollectionViewCell से)। मूल दृष्टिकोण मॉडल की प्रत्येक प्रॉपर्टी के लिए एक आउटलेट बनाने के लिए है जिसे इसे दिखाए जाने और दृश्य मॉडल से आरंभ करने की आवश्यकता है: अपारदर्शी परतों का उपयोग करें और ग्रेडियेंट्स से बचें, क्योंकि पारदर्शी परत का उपयोग करना या एक ढाल लागू करने के लिए पर्याप्त मात्रा में गणना की आवश्यकता होती है, यदि संभव है, हमें स्क्रोलिंग प्रदर्शन को सुधारने के लिए उनका उपयोग करने से बचना चाहिए। विशेष रूप से, हमें अल्फा मान को बदलने से बचने और सेल के लिए एक मानक आरजीबी रंग (UIColor. clear से बचने) का उपयोग करना चाहिए और इसमें कोई भी छवि शामिल है: सब कुछ एक साथ डाल देना: अनुकूलित सेल प्रतिपादन इस समय, सेल को एक बार इसकी समय प्रस्तुत करना आसान पेसिज़ होना चाहिए और वास्तव में तेज़ होना चाहिए क्योंकि: हम कैश्ड दृश्य मॉडल डेटा का उपयोग कर रहे हैं। हम अतुल्यकालिक छवियों को आकर्षित कर रहे हैं अद्यतन कोड है: यूआईटेबल वीव्यू के लिए टिप्स वेरिएबल ऊँचाई के सेल के लिए सेल्फ-साइजिंग सेल का उपयोग करें यदि हम अपने टेबल व्यू में प्रदर्शित होने वाले कोशिकाओं को चर ऊंचाई में रखते हैं, तो हम स्वयं बड़े आकार का कोशिकाओं का उपयोग कर सकते हैं। असल में, हमें यह सुनिश्चित करने के लिए उचित ऑटो लेआउट बाधाएं बनाना चाहिए कि चर के साथ यूआई घटक सही तरीके से फैले होंगे। तो हमें सिर्फ अनुमानित रोशनी और पंक्तिहाइट की संपत्ति को प्रारंभ करने की आवश्यकता है: नोट: दुर्भाग्यपूर्ण मामले में हम स्वयं-आकार की कोशिकाओं का उपयोग नहीं कर सकते हैं (उदाहरण के लिए, यदि आईओएस 7 के लिए समर्थन अभी भी जरूरी है) तोड़ने के लिए प्रत्येक तालिका की गणना करने के लिए टेबलव्यू (heightForRowAt :) लागू करना है सेल ऊंचाई हालांकि, यह अभी भी संभव है, स्क्रॉलिंग प्रदर्शन में सुधार करने के लिए: UICollectionView के लिए विशिष्ट टिप्स हम उचित UICollectionViewFlowLayoutDelegate प्रोटोकॉल विधि को लागू करके हमारे संग्रह दृश्य को आसानी से अनुकूलित कर सकते हैं। अपने सेल आकार की गणना करें हम संग्रह संग्रह को लागू करके हमारे संग्रह दृश्य सेल आकार को कस्टमाइज़ कर सकते हैं (: लेआउट: आकार ForItemAt :): शीर्ष पर स्थित यूआईटीबल दृश्य के किनारों का विस्तार करें। 107 मैं अपने खुद के UITableView को बनाने के लिए SlackTextViewController subclassed, लेकिन पाया कि टेबल दृश्य शीर्ष नेविगेशन बार Xcode में यूजर इंटरफेस इंस्पेक्टर भी यह पुष्टि करता है। मुझे आश्चर्य है कि मैं कैसे नेविगेशन बार के तहत UITableViews किनारों को विस्तारित कर सकता हूं, ताकि तालिकादृश्य पर सामग्री पारभासी बार के माध्यम से प्रदर्शित हो सकती है। संपादित करें: कोड की जांच करने के बाद, मुझे पता चला कि समस्या इस पद्धति में निहित है यदि उल्लिखित संपत्ति को हाँ पर सेट किया गया है, तो edgesForExtendedLayout संपत्ति को स्वचालित रूप से UIRectEdgeNone पर सेट किया गया है अगर मैं इस रेखा को हटाता हूँ तो तालिका दृश्य ऊपर की ओर बढ़ेगा डापेंगागो ने यूआईटीबल वीयूवी से शीर्षक बदलकर यूआईटीबल वीयूई के लिए शीर्ष पट्टी के नीचे किनारों को बढ़ाया, शीर्ष पट्टी के तहत किनारों को बढ़ाएं, 22 जनवरी, 2018 को हटाने के लिए ज़ोर से मारना करें। डीएपीएंगगाओ ने यूआईटीबल वीयूवी से शीर्षक बदल दिया है, शीर्ष पट्टी के नीचे के किनारों को बढ़ाएं, यूआईटीबलएव्यू को हटाने के लिए ज़ोर से मारना टॉप बार के तहत किनारों का विस्तार करें। , 2018

Comments

Popular posts from this blog

ब्रेकआउट रणनीति विदेशी मुद्रा एमटी 4 सूचक

एडेन रुसफेल्डट फॉरेक्स कारखाना

बैंड सूचक फ़ॉरेक्स ट्रेबरू