हालाँकि यह सवाल प्रोग्रामेटिक रूप से बताता है, एक ही समस्या का सामना करना पड़ रहा है, और इंटरफ़ेस बिल्डर में काम करना पसंद कर रहा है, मैंने सोचा कि यह एक इंटरफ़ेस बिल्डर समाधान के साथ मौजूदा उत्तरों को जोड़ना उपयोगी हो सकता है।
पहली बात तो भूल जाना है sizeToFit
। ऑटो लेआउट आंतरिक सामग्री के आकार के आधार पर इसे आपकी ओर से हैंडल करेगा।
इसलिए समस्या यह है कि ऑटो लेआउट के साथ संतुष्ट होने के लिए लेबल कैसे प्राप्त करें? विशेष रूप से - क्योंकि प्रश्न में इसका उल्लेख है - ऊंचाई। ध्यान दें कि समान सिद्धांत चौड़ाई पर लागू होते हैं।
तो चलिए एक उदाहरण से शुरू करते हैं UILabel कि ऊंचाई 41px तक है:
जैसा कि आप ऊपर दिए गए स्क्रीन ग्रैब में देख सकते हैं, "This is my text"
ऊपर और नीचे पैडिंग है। यह उइबेल की ऊंचाई के बीच पैडिंग है, और यह सामग्री, पाठ है।
यदि हम सिम्युलेटर में ऐप चलाते हैं, तो निश्चित रूप से, हम एक ही चीज़ देखते हैं:
अब, आइये इंटरफ़ेस बिल्डर में UILabel का चयन करें, और आकार निरीक्षक में डिफ़ॉल्ट सेटिंग्स पर एक नज़र डालें:
ऊपर उल्लिखित बाधा पर ध्यान दें। वह कंटेंट हगिंग प्रायरिटी है । जैसा कि एरिका सदून ने उत्कृष्ट आईओएस ऑटो लेआउट में इसका वर्णन किया है , यह है:
जिस तरह से यह मूल सामग्री के आसपास अतिरिक्त पैडिंग से बचने के लिए एक दृश्य पसंद करता है
हमारे लिए, यूबिल के साथ, मूल सामग्री पाठ है।
यहाँ हम इस मूल परिदृश्य के दिल में आते हैं। हमने अपने टेक्स्ट लेबल को दो अड़चनें दी हैं। वे संघर्ष करते हैं। एक का कहना है "ऊंचाई 41 पिक्सेल के बराबर होनी चाहिए" । दूसरे कहते हैं, "यह सामग्री को देखने के लिए गले लगाओ ताकि हमारे पास कोई अतिरिक्त गद्दी न हो" । हमारे मामले में, यह पाठ को देखने के लिए गले लगाओ ताकि हमारे पास कोई अतिरिक्त गद्दी न हो।
अब, ऑटो लेआउट के साथ, दो अलग-अलग निर्देशों के साथ जो अलग-अलग काम करते हैं, रनटाइम को एक या दूसरे को चुनना होगा। यह दोनों नहीं कर सकते। यूआईबेल 41 पिक्सेल उच्च और दोनों नहीं हो सकता है कोई पैडिंग नहीं है।
जिस तरह से इसे हल किया गया है, प्राथमिकता को निर्दिष्ट करके है। एक निर्देश के लिए दूसरे की तुलना में उच्च प्राथमिकता होनी चाहिए। यदि दोनों निर्देश अलग-अलग बातें कहते हैं, और समान प्राथमिकता है, तो एक अपवाद होगा।
तो चलिए हम इसे देते हैं। मेरे कद की बाधा 1000 की प्राथमिकता है , जिसकी आवश्यकता है । कंटेंट हगिंग की ऊंचाई 250 है , जो कमजोर है । यदि हम ऊंचाई की बाधा को 249 तक कम कर दें तो क्या होगा ?
अब हम जादू की शुरुआत देख सकते हैं। आइए सिम में कोशिश करते हैं:
बहुत बढ़िया! कंटेंट हगिंग हासिल की। केवल इसलिए कि ऊँचाई प्राथमिकता 249 सामग्री हगिंग प्राथमिकता 250 से कम है । मूल रूप से, मैं कह रहा हूँ "मेरे द्वारा निर्दिष्ट ऊँचाई सामग्री हगिंग के लिए मेरे द्वारा निर्दिष्ट की गई तुलना में कम महत्वपूर्ण है" । तो, सामग्री हगिंग जीत जाती है।
निचला रेखा, पाठ को फिट करने के लिए लेबल प्राप्त करना उतनी ही सरल हो सकता है जितना कि ऊँचाई - या चौड़ाई - बाधा को निर्दिष्ट करना और उस अक्ष की सामग्री के साथ प्राथमिकता प्राथमिकता बाधा को सही करना।
पाठक के लिए एक अभ्यास के रूप में चौड़ाई के बराबर करना छोड़ देंगे!
label.sizeToFit()
Xcode / viewController में उपयोग करने की आवश्यकता नहीं थी , बाधाएं पर्याप्त थीं। खेल के मैदान में लेबल नहीं बना रहा था । अभी तक मुझे प्लेग्राउंड में काम करने का एकमात्र तरीका हैlabel.sizeToFit()