2013-03-07 6 views
7

मेरे पास UILabel है और मैं इसे सेट करना चाहता हूं ताकि इसकी superView की बजाय इसकी text पर एक निश्चित चौड़ाई और परिवर्तनीय ऊंचाई हो।ULabel के लिए NSLayoutConstraint अतिरिक्त लाइनों को "बढ़ने" के लिए

यानी text "हैलो वर्ल्ड" है। तो लेबल हो जाएगा ...

------------------------ 
|Hello World.   | 
------------------------ 

और अगर text है "यह कुछ बहुत ही लंबा पाठ है कि कई लाइनों पर चला जाता है।" तब लेबल हो जाएगा ...

------------------------ 
|This is some very long| 
|text that goes over | 
|several lines.  | 
------------------------ 

मैं पहले से ही एक NSLayoutConstraint का उपयोग कर निर्धारित चौड़ाई निर्धारित किया है और मैं 0 करने के numberOfLines की स्थापना की है, लेकिन यह सिर्फ एक लाइन ऊंचाई रखने के लिए और एक अंडाकार के साथ पाठ कोनकैटेनेट्स किया गया।

मुझे पता है कि "सामग्री प्रतिरोध" या कुछ कहा जाता है लेकिन मुझे इस बारे में निश्चित नहीं है कि इसका नाम या इसका उपयोग कैसे किया जाए।

क्या यह संभव है?

उत्तर

10

आपको लेबल की preferredMaxLayoutWidth को अपनी निश्चित चौड़ाई पर सेट करने की आवश्यकता है। मुझे नहीं पता कि यह आपके लिए क्यों नहीं आ सकता है क्योंकि आप चौड़ाई तक सीमित हैं, लेकिन वहां आप जाते हैं।

तो एक निश्चित आकार सेट करने के लिए एक autolayout दुनिया में गलत लगता है (यह चाहिए! जो) तो आप मूल्य लेबल की चौड़ाई से viewDidLayoutSubviews में सेट कर सकते हैं के बाद लेआउट हुआ है,। इस मामले में अपने लेआउट को अमान्य करने के अनंत लूप में न आने के लिए सावधान रहें।

+1

यह काम करता है धन्यवाद। हालांकि ऑटो लेआउट रखना गलत है और UILabel को एक पसंदीदा चौड़ाई दें। मेरे पास लेबल की "निश्चित" चौड़ाई इसके सुपरव्यू की चौड़ाई पर निर्भर है। हालांकि पसंदीदा MaxLayoutWidth अब एक स्थिर है। ओह ठीक है, इस मामले में सुपरव्यू नहीं बदलेगा, इससे कोई फर्क नहीं पड़ता, लॉल। – Fogmeister

+1

मैं सहमत हूं! अधिक गतिशील लेआउट के लिए आप मूल्य को DidLayoutSubviews में सेट कर सकते हैं और इसे सीमा चौड़ाई से आधार बना सकते हैं। – jrturton

-2

इस कोड को यह आप के लिए उपयोगी हो सकता है>

[email protected]"haiiiiiiiii"; 

    UIFont *cellFont=[UIFont fontWithName:@"Helvetica" size:12.0]; 
    CGSize constraintSize=CGSizeMake(250,MAXFLOAT); 
    CGSize txtViewSize=[label.text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

yourlabelname.numberOfLines = 0 का प्रयास करें;

सीजीआरईटी फ्रेम = yourlabelname.frame;

frame.size.width=250; 

frame.size.height=txtViewSize.height; 

yourlabelname.frame=frame; 

yourlabelname.text=cellText; 
+1

मैं ऑटोलाउट का उपयोग कर रहा हूं इसलिए मैं फ्रेम को सीधे नहीं बदल सकता। हालांकि धन्यवाद। – Fogmeister

संबंधित मुद्दे