2011-12-02 17 views
9

मेरे पास lineBreakMode के साथ UILabel है UILineBreakModeWordWrap पर सेट है। यह ठीक काम करता है, सिवाय इसके कि जब मेरे पास कोई रिक्त स्थान वाला टेक्स्ट का लंबा स्लैब नहीं है। इस मामले में यह टेक्स्ट के लंबे स्लैब को लपेटता नहीं है बल्कि यूआईएलएबल फ्रेम के दाईं ओर पहुंचने के बाद बस इसे बंद कर देता है। मैं UILabel को कैसे बता सकता हूं कि इसे इस स्थिति में एक वर्ण सीमा पर लपेटना चाहिए केवल (अनिवार्य रूप से UILineBreakModeCharacterWrap सेटिंग के बराबर है, लेकिन केवल उन लापरवाही पाठ के उन लंबे स्लैब के लिए)।यूलाबेल वर्ड लपेटें/कैरेक्टर लपेटें

अग्रिम धन्यवाद!

+1

भावी पाठकों के लिए नोट (मेरे जैसा): आईओएस 7 और एसडीके 8 के साथ परीक्षण, UILineBreakModeWordWrap अब जिस तरह से उम्मीद करेगा, काम करने के लिए प्रतीत होता है।यही है, जब संभव हो तो यह शब्द से टूट जाता है, लेकिन यदि आवश्यक हो तो चरित्र द्वारा। अगर यह UILabel के लिए है। – eselk

उत्तर

0

तुम खुद क्या करना है, वहाँ 'को छोड़कर जब मैं नहीं चाहता आप करना चाहते शब्द का प्रयोग रैपिंग' के लिए कोई विकल्प नहीं है :)

तो एक शब्द बहुत लंबा था इससे पहले कि आप इसे में अंतराल डाल सकता है आप लेबल को यह जानने के लिए प्रदर्शित करते हैं कि कहां लपेटना है?

3

ऐसा करने का एक तरीका आईबी में लाइन्स प्रॉपर्टी सेट करना है। जब आप लाइनों की संख्या निर्धारित 3 के रूप में पाठ लपेटता तक कि कई लाइनों पर कब्जा कर लिया जाता है तो

textLabel.lineBreakMode = UILineBreakModeWordWrap; 
textLabel.numberOfLines = 3; 

-

enter image description here

या कोड से यह करते हैं।

+1

ओपी विशेष रूप से 'वर्ड रैप' चाहता है जो उसके पास एक शब्द नहीं है (उदाहरण के लिए 'Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch' जो टेक्स्ट बॉक्स से बड़ा है), इससे कोई फर्क नहीं पड़ता कि आप इसे कितनी लाइनें देते हैं :) – deanWombourne

0

डीन सही है। यदि आप इसे चाहते हैं तो आपको इसे मैन्युअल रूप से करना होगा। नीचे दिया जाएगा कोड एक लेबल वर्डवाइप करेगा भले ही यह रिक्त स्थान न हो। यह किसी और यह एक ही समस्या हो रही के लिए मदद मिल सकती है

  NSString *someText = yourLabel.text; 

    //Check if the text contains spaces  
//The method in the below if condition is user defined and you have to define one. lol 
     if(![self textContainsSpaces:someText]) 
     { 
     //Do the word wrap manually 
      CGSize constraintSize; 

      constraintSize.width = 165; 

      constraintSize.height = 165; 

      CGSize stringSize =[someText sizeWithFont: [UIFont boldSystemFontOfSize: 17] constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap]; 

      CGRect rect = CGRectMake(yourLabel.frame.origin.x, yourLabel.frame.origin.y, 165, (stringSize.height+10)); 

      yourLabel.frame = rect; 
     } 
9

, मैं समाप्त हो गया-अप एक UILabel के बजाय एक UITextView का उपयोग करके इसे सुलझाने।

  1. यह निर्धारित पाठ रिक्ति है कि क्या और से शब्द/चरित्र चादर/करने के लिए UILabel की लाइन ब्रेक मोड बदलने के लिए किसी भी कस्टम व्यवहार की आवश्यकता नहीं है: यह दो कारणों से सबसे अच्छा समाधान था।

  2. अधिक महत्वपूर्ण बात यह है कि आपके पास सामान्य शब्द हो सकते हैं (जिसमें आप शब्द सीमाओं को लपेटना चाहते हैं) और अतिरिक्त लंबे पाठ (जिसे आपको चरित्र सीमाओं पर लपेटने की आवश्यकता है)। "नकली शब्द लपेटें" को मजबूर करने के लिए उस अतिरिक्त लंबे पाठ (सही स्थिति पर) में एक जगह डालने के लिए किसी प्रकार का तर्क लिखने के लिए, मैं स्थिति के आधार पर शब्दों और पात्रों पर रैपिंग को संभालने का कोई तरीका नहीं देख सकता, एक UILabel के भीतर। UITextView आवश्यक रूप से शब्द सीमाओं या चरित्र सीमाओं को तोड़ने, स्वचालित रूप से इस स्थिति को संभालता है।

मैं यह कैसे कर रहा हूँ पर स्पष्ट जानकारी के लिए मैं संपादन और विकलांग स्क्रॉल के साथ एक एक पंक्ति UITextView है। मैंने को UILabel की तरह पैडिंग बनाने (अनसुनी आंखों के लिए) को हटाने के लिए भी सेट किया है। मैं प्रस्तुत किए गए पाठ के फ्रेम को निर्धारित करने के लिए sizeWithFont:constrainedToSize:lineBreakMode: विधि का उपयोग कर रहा हूं और तदनुसार UITextView के फ्रेम को समायोजित कर रहा हूं ताकि यह टेक्स्ट को ठीक से फिट कर सके।

आशा है कि इससे मदद मिलती है!

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