UILabel के लिए लाइन ब्रेक कैसे जोड़ें?


262

देखते हैं कि मैं इस तरह एक स्ट्रिंग देखो:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

मैं इसे कैसे बनाऊं ताकि UILabel इस तरह से संदेश प्रदर्शित करे

AAAAA
BBBBB
CCCCC

मुझे नहीं लगता कि \nयूआईबेल द्वारा मान्यता प्राप्त है, इसलिए क्या ऐसा कुछ है जिसे मैं एनएसएसटीरिंग के अंदर रख सकता हूं ताकि यूआईबेल को पता चले कि उसे वहां एक लाइन ब्रेक बनाना है?

जवाबों:


332

का प्रयोग करें \nजैसा कि आप अपने स्ट्रिंग में प्रयोग कर रहे हैं।

किसी भी संख्या की पंक्तियों के लिए अनुमति देने के लिए नंबरऑफलाइनों को 0 पर सेट करें।

label.numberOfLines = 0;

पाठ के आकार का उपयोग करने के लिए लेबल फ्रेम को अपडेट करें sizeWithFont:। यदि आप ऐसा नहीं करते हैं तो आपका पाठ लंबवत केंद्रित होगा या कट जाएगा।

UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:label.frame.size
                              lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

अद्यतन: पदावनत के लिए प्रतिस्थापन

sizeWithFont:constrainedToSize:lineBreakMode:

संदर्भ, पदावनत आकार के लिए प्रतिस्थापनWithFont: iOS 7 में?

CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];

label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

2
UILabelएक भी नहीं है originऔर न ही sizeiOS पर संपत्ति? यह शायद label.frame.origin.xआदि होना चाहिए
पीटरडक

1
SizeWithAttributes का उपयोग करने के बजाय फिर फ्रेम सेट करना, आप बस आकार को कॉल कर सकते हैं वर्क-आउट करने के लिए फ़ाइट करें और एक त्वरित चरण में फ़्रेम का आकार सेट करें।
जिम्मुजुदास

@ हेरंग, उत्तर को अद्यतन करने के लिए धन्यवाद।
गेरी शॉ

274

यहां छवि विवरण दर्ज करें

एक पंक्ति फ़ीड (\ n) सम्मिलित करने के लिए इंटरफ़ेस बिल्डर में छोटे बॉक्स में टाइप करते समय विकल्प-वापसी का उपयोग करें। इंटरफ़ेस बिल्डर के लेबल विशेषताओं में, # लाइन्स = 0 सेट करें।

लेबल का चयन करें और फिर ऊपर की छवि में लाइन्स की संपत्ति को 0 में बदलें, और फिर लाइन ब्रेक के लिए अपने स्ट्रिंग में \ n का उपयोग करें।


2
यह सुपर उपयोगी है!
नितिन अलबुर

इसके लिए हमेशा के लिए लग गया। धन्यवाद :)
शाय मिशली

शानदार जवाब। धन्यवाद!
16 अक्टूबर को Macondo2Seattle

1
प्रोग्राम को लेबल सेट करते समय और स्ट्रिंग में \ n (newline) जोड़ने पर काम नहीं करता है।
चोकी द कॉर्की

गजब का। मेरी आवश्यकता केवल स्टोरीबोर्ड लेबल के साथ ऐसा करने की थी। और यह एक आकर्षण की तरह काम करता था।
तेजस

132

यदि आप XML फ़ाइल से एक स्ट्रिंग पढ़ते हैं, तो \nइस स्ट्रिंग में लाइन ब्रेक UILabelपाठ में काम नहीं करेगा । \nएक लाइन ब्रेक में पार्स नहीं कर रहा है।

यहाँ इस समस्या को हल करने के लिए एक छोटी सी चाल है:

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

तो आपको एक हार्डकोड में एक \nपार्स द्वारा अनसर्स्ड पार्ट को अपने स्ट्रिंग में बदलना होगा ।\nNSString

यहाँ मेरी अन्य लेबल सेटिंग्स हैं:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

सबसे महत्वपूर्ण सेट करने के लिए है numberOfLinesकरने के लिए 0(लेबल में लाइनों की = असीमित संख्या)।

पता नहीं कि Apple ने \nXML से पढ़े गए तार में पार्स न करने का विकल्प क्यों चुना है ?

उम्मीद है की यह मदद करेगा।


1
\nजब Parse.com से तार मिलते हैं तो iOS पार्स नहीं करता है (मुझे लगता है कि यह तब भी होगा जब अन्य API से स्ट्रिंग प्राप्त होगा)
ब्रायन

आपने मेरा दिन बचाया। मैं xml फ़ाइलों से newline के साथ स्ट्रिंग हो रही हूँ।
सेरी

127

इंटरफ़ेस बिल्डर में, आप अपनी इच्छित स्थिति में सम्मिलित करने के लिए Ctrl+ Enterका उपयोग कर सकते /nहैं। यह तरीका निम्नलिखित स्थिति को लागू कर सकता है

aaa
aaaaaaa


नहीं, मैंने वोट नहीं डाला। मैंने सिर्फ बेहतर प्रस्तुति के लिए उत्तर संपादित किया।
मनोज कुमार

तो वास्तव में सरल! +1
मार्लोनप्या

2
विश्वास नहीं कर सकता मैं उस चाल को कभी नहीं जानता था! मैंने शिफ्ट-एंटर करने की कोशिश की, क्योंकि यह काफी मानक है। उसके लिए धन्यवाद!
इकोलोन

यह ठीक वही है जिसकी मुझे तलाश थी! धन्यवाद +1!
रिक्रवो

1
महान पद! छोटा सुधार: मेरा मानना ​​है कि आप
क्राफ्ट

25

आपको numberOfLinesसंपत्ति को उस पर सेट करना होगा UILabel। डिफ़ॉल्ट 1 है , यदि आप इसे 0 पर सेट करते हैं तो यह सभी सीमाएं हटा देगा।


22

इसके \nबजाय (बैकस्लैश) ध्यान देना महत्वपूर्ण है /n


10

स्विफ्ट 2.2 में,> आईओएस 8

मैंने स्टोरीबोर्ड पर लाइन्स = 0 सेट किया है, एट्रीब्यूट इंस्पेक्टर के तहत और लेबल के लिए एक संदर्भित आउटलेट जुड़ा हुआ है। फिर इस तरह नियंत्रक में उपयोग करें:

 @IBOutlet weak var listLabel: UILabel!

 override func viewDidLoad() {
      ...
      listLabel.text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8"
 }

6

// नंबरऑफलाइन को शून्य पर सेट करना न भूलें

UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd \nUK Apr 12"];
[cell addSubview:locationTitle];

6

बस इसे ऐसे ही करें

NSString * strCheck = @"A\nB";

strCheck = [strCheck stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];  //This is to prevent for fetching string from plist or data structure

label.numberOfLines = 0;

label.lineBreakMode = NSLineBreakByWordWrapping;

label.text = strCheck;

4

Xcode 6 पर, आप वर्ड रैप का उपयोग करते समय स्ट्रिंग के अंदर भी \ n का उपयोग कर सकते हैं। यह काम करेगा। उदाहरण के लिए:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"This will be on the first line\nfollowed by a line under it.";
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;

3

यदि आप का उपयोग करते हुए UILabelआपको यह याद रखना है कि डिफ़ॉल्ट सेटिंग 1 लाइन है, तो इससे कोई फर्क नहीं पड़ता कि आप कितने ब्रेक जोड़ते हैं ( \nया \r), आपको यह सुनिश्चित करने की आवश्यकता है कि यह एक से अधिक लाइन पर सेट है, इसलिए इसे संलग्न करने की अनुमति दी जा सकती है अधिक लाइनें।

एक विकल्प का उपयोग करना है UITextViewजो वास्तव में मल्टीलाइन के लिए है।

आप इसे आसानी से UCabel के XCode विशेषता अनुभाग में प्राप्त कर सकते हैं, स्क्रीनशॉट देखें:

यहां छवि विवरण दर्ज करें


3

उन लोगों के लिए जो एक आसान समाधान चाहते हैं, पाठ लेबल इनपुट बॉक्स में निम्न कार्य करें:

सुनिश्चित करें कि आपकी संख्या रेखाएँ 0 पर सेट हैं।

Alt + दर्ज करें

(Alt आपकी विकल्प कुंजी है)

चीयर्स!



2

मेरे मामले में भी \ n काम नहीं कर रहा था, मैंने लाइनों की संख्या को 0 पर रख कर समस्या को ठीक किया और नमस्ते \ n दुनिया के बजाय उदाहरण के लिए स्वयं ही नई पंक्ति के साथ पाठ को कॉपी और पेस्ट किया

हैलो

विश्व

इंटरफ़ेस बिल्डर में।


अति उत्कृष्ट! काम करता है।
दिमित्रीकुननिकॉफ

2

XCode 11 में, स्विफ्ट 5 \nठीक काम करता है, नीचे दिए गए कोड की कोशिश करें:

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"

1
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);

0

किसी और के लिए जिसे sizeWithFont:constrainedToSize:lineBreakMode:आईओएस 8 पर स्विच करने में परेशानी हो सकती है या कोई भी हो सकता है (विधि को आईओएस 7 के रूप में चित्रित किया गया है), मैंने sizeToFitइसके बजाय का उपयोग करके अपनी ऊंचाई समायोजित की ।

UILabel *label;
label.numberOfLines = 0;
// Setup label with desired settings
...
[label sizeToFit];
label.frame = CGRectMake(label.frame.origin.x,     // Or use any desired origin
                         label.frame.origin.y, 
                         label.frame.size.width,   // Or use any desired width
                         label.frame.size.height);


0

यह मेरे लिए गलत लगता है कि लेबल फ्रेम के आकार को बदलने के लिए विशेष रूप से ऑटोलैयूट का उपयोग करते समय। परिशिष्ट विधि का उपयोग करना अधिक उचित लगता है। यहाँ मेरा उदाहरण है:

NSMutableString *list = [[NSMutableString alloc] init];
NSArray *textArray = @[@"AAAA", @"BBBB"];
for (NSString *string in textArray) {
    [list appendFormat:@"%@\n", string.mutableCopy];
}
self.label.text = list;
self.label.numberOfLines = 0;

0

यदि आप अपने UILable गुणों को प्लेन से अटेच करने के लिए सेट करते हैं ... तो UILabel आपके टेक्स्ट को जिस स्क्रीन क्षेत्र में प्रदर्शित करना चाहते हैं, उसे फिट करने के लिए कोई भी बात नहीं है, चाहे आपके UILabel की ऊँचाई और चौड़ाई कितने ही पैराग्राफ हो, पर मल्टीलाइन टेक्स्ट होल्ड करेगा।


0

मैंने एक ही समस्या का सामना किया है, और यहाँ है, मैंने समस्या को कैसे हल किया। आशा है कि यह किसी के लिए उपयोगी होगा।

// स्विफ्ट 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

// उद्देश्य सी

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// C # (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.