2012-09-08 21 views
9

आईओएस 5.UILabel और numberOfLines और sizeToFit:

पर मैं एक UILabel तत्व यह है कि मूल रूप से एक निब में रखा गया है है। मैं चाहता हूं कि एक्स प्लेसमेंट तय रहें। मैं इसे 1 लाइन, या 2 लाइनों लेना चाहता हूं। यदि दो से अधिक लाइनें हैं, तो इसे एलिप्सिस दिखाने के लिए लाइन ब्रेक सेटिंग का उपयोग करना चाहिए।

मैं numberOfLines संपत्ति और का उपयोग -sizeToFit

अगर मैं 0 करने के लिए UILabel के numberOfLines गुण सेट, इसे सही ढंग से कुछ पाठ के लिए देखेंगे कि, वहाँ पर्याप्त जगह नहीं है और -sizeToFit बुला के बाद एक दूसरी लाइन को लपेट जाएगा, लेकिन दुर्लभ मामले में कि रेखा 3 लाइनों तक फैलाने के लिए काफी लंबी है, मुझे तीन लाइनें मिलती हैं, जिन्हें मैं नहीं चाहता हूं। यदि मैंने numberOfLines प्रॉपर्टी को 2 पर सेट किया है, तो यह वास्तव में पूरी चीज को एक पंक्ति पर फैलाता है और मेरे शुरुआती फ्रेम सेट को निब में बहुत व्यापक बनाता है।

CGRect titleFrame = [[self titleLabel] frame]; 
[[self titleLabel] setNumberOfLines:0]; 
[[self titleLabel] setText:newProductTitleText]; 
[[self titleLabel] sizeToFit]; 
CGRect newTitleFrame = [[self titleLabel] frame]; 

सीजीआरईटी सिर्फ मेरे लिए चीजों की गणना करने में सक्षम होने के लिए हैं। तो numberOfLines से 0 कार्यों को सेट करना, और फ्रेम में मूल origin.x को नहीं बदलेगा, और लंबे टेक्स्ट को कई पंक्तियों में तोड़ देगा, लेकिन इसे 2 लाइनों तक सीमित नहीं करेगा। 2 के लिए numberOfLines गुण को सेट है, जो है, जब मैं एप्पल डॉक्स पढ़

यह संपत्ति लाइनों की अधिकतम संख्या को उसकी सीमांकन आयत में लेबल का पाठ फिट करने के लिए उपयोग करने के लिए नियंत्रित करता है। इस संपत्ति के लिए डिफ़ॉल्ट मान 1. है किसी भी अधिकतम सीमा को निकालने के लिए, और आवश्यकतानुसार के रूप में कई लाइनों का प्रयोग, 0.

को यह संपत्ति के मूल्य सेट ऐसा लगता है मैं दो और अभी भी करने में सक्षम सेट इस होना चाहिए यह काम करो मैं sizeToFit उम्मीद होती है जब सभी पाठ फिट करने के लिए विस्तार कर एक सकारात्मक एक्स और वाई दिशा में विस्तार करने के लिए, लेकिन यह एक नकारात्मक एक्स दिशा में विस्तार हो रहा है जब numberOfLines से 0.

ईटीए अन्य पर सेट है: "AutoSize" struts हैं एक न्यूनतम एक्स, वाई पर इसे ठीक करने के लिए ऊपरी और बाईं ओर सेट करें।

किसी भी अंतर्दृष्टि के लिए धन्यवाद।

+0

मुझे लगता है कि इस सूत्र में मदद मिल सकती http://stackoverflow.com/questions/5041874/uilabels-sizetofit-sizethatfits-ignore-the-numberoflines-property/13786846 # 13786846 –

+2

यह एक पुराना सवाल है, और शायद वर्तमान आईओएस के लिए प्रासंगिक नहीं है, लेकिन मुझे नहीं लगता कि यह एक डुप्लिकेट कैसे है। मैंने इस सवाल को पढ़ा है कि दावा किया गया है कि यह एक डुप्लिकेट है और यह एक अलग सवाल है।यह एक नकारात्मक एक्स '-sizeToFit' द्वारा निर्धारित और नहीं के बारे में खड़ी एक UILabel में पाठ संरेखित होने के बारे में पूछता है। – chadbag

उत्तर

0

मैं यहाँ कैसे मुझे लगता है कि समस्या का समाधान है एक ऐसी ही समस्या जहां -[UILabel sizeToFit] अधिकतम चौड़ाई मैं सेट जब numberOfLines 2. करने के लिए स्थापित किया गया था का सम्मान न किया गया था:

CGFloat titleMaxWidth = 200; 
    CGFloat titleMinHeight = 30; 
    CGFloat titleMaxHeight = 40; 
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib 
    titleLabel.numberOfLines = 0; 
    titleLabel.text = @"The title label will be sized appropriately with this technique."; 
    titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [titleLabel sizeToFit]; 
    titleLabel.numberOfLines = 2; 
    if (titleLabel.height > titleMaxHeight) 
    { 
     titleLabel.height = titleMaxHeight; 
    } 
    else if (titleLabel.height < titleMinHeight) 
    { 
     titleLabel.height = titleMinHeight; 
    } 

आप देख सकते हैं, मैं भी एक न्यूनतम चाहता था मेरे लेबल के लिए ऊंचाई, -sizeToFit अक्सर लेबल को वास्तव में छोटा बनाता है, लेकिन यदि आप न्यूनतम ऊंचाई की परवाह नहीं करते हैं तो आप उस कोड को अवहेलना कर सकते हैं। शीर्षक के लिए 40 का "जादू संख्या" मैक्सहेइट प्रयोग से आता है और यह पता लगाता है कि इस फ़ॉन्ट के साथ 2 लाइन लेबल वास्तव में केवल 40px की आवश्यकता है। इस कोड में, -sizeToFit मुख्य रूप से चौड़ाई के भीतर पाठ को रखने के लिए उपयोग किया जाता है और यह निर्धारित करता है कि जब हमारे पास टेक्स्ट की एक छोटी स्ट्रिंग है तो 40 की आरंभिक ऊंचाई को कम किया जा सकता है या नहीं।

0

मैं UIFont संपत्ति lineHeight प्रयोग किया है:

CGFloat labelHeight = label.font.lineHeight*label.numberOfLines;