UILabel में पाठ की कई पंक्तियाँ


443

क्या पाठ की कई पंक्तियों को UILabelपसंद करने का एक तरीका है UITextViewया मुझे इसके बजाय दूसरे का उपयोग करना चाहिए?


5
ध्यान दें कि UILineBreakModeWordWrapiOS 6 में पदावनत किया गया था। अब आपको यहाँNSLineBreakByWordWrapping = 0 प्रलेखन देखना होगा
Austin

इस प्रश्न की जाँच करें stackoverflow.com/questions/2312899/…
user1766342

जवाबों:


796

मुझे एक उपाय मिला।

एक को निम्नलिखित कोड जोड़ना होगा:

// Swift
textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping
textLabel.numberOfLines = 0 

// For Swift >= 3
textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B'
textLabel.numberOfLines = 0

// Objective-C
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;

// C# (Xamarin.iOS)
textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;  

पुराना उत्तर बहाल (संदर्भ और देवियों के लिए नीचे iOS 6.0 का समर्थन करने को तैयार):

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

इस ओर: दोनों एनुम मान 0वैसे भी उपज देते हैं ।


16
UILineBreakModeWordWrap वास्तव में डिफ़ॉल्ट है इसलिए आपको पहली पंक्ति की आवश्यकता नहीं है।
जार्रेड ओल्सन

1
स्विफ्ट का उपयोग करने वालों के लिए: cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrappingऔरcell.textLabel?.numberOfLines = 0
19

5
ज़मीरिन-कोड प्रदान करने के लिए धन्यवाद। स्वतः पूर्णता से काम नहीं किया क्योंकि उन्होंने उस संपत्ति को संक्षिप्त करना चुना ... +1
जान गिलिच

मैं मानता हूँ जार्ड ओल्सन के साथ, NSLineBreakByWordWrapping है डिफ़ॉल्ट । मैंने इसे ठीक करने के लिए गुरुमूर्ति अरुमुगम के गाइड की तरह संपत्ति का आकार जोड़ा । यदि आप अपने लेबल के अंदर फ़ॉन्ट को लेबल की सीमाओं में फिट करने के लिए समायोजित करना चाहते हैं। आप उपयोग कर सकते हैं: textLabel.adjustsFontSizeToFitWidth = YES; सबको शुक्रीया।
रयान ट्रान्स

@JarredOlson डॉक्स का कहना है "यह संपत्ति डिफ़ॉल्ट रूप से byTruncatingTail पर सेट है।"
बिल

138

आईबी में, 0 के लिए लाइनों की संख्या निर्धारित करें (असीमित लाइनों की अनुमति देता है)

जब आईबी का उपयोग करके टेक्स्ट फ़ील्ड के भीतर टाइप किया जाता है, तो रिटर्न डालने के लिए "ऑल्ट-रिटर्न" का उपयोग करें और अगली पंक्ति पर जाएं (या आप लाइनों द्वारा पहले से अलग किए गए पाठ में कॉपी कर सकते हैं)।


1
[जैसा कि वह जानबूझकर एक से अधिक-एक साल पुराने धागे को खोदता है ...] एक बात जो मैं कभी-कभी चाहता हूं कि मैं आईबी में कर सकता हूं बिना एम्बेडेड लाइन ब्रेक के बिना पाठ दर्ज करें , सेट करें UILineBreakModeWordWrap और numberOfLn = 0, और फिर लेबल ऑटो है स्वचालित रूप से ऊंचाई को आकार दें, जबकि आईबी में अभी भी सभी डिजाइनिंग। मैं उस मामले के बारे में सोच रहा हूं जहां दृश्य को परिदृश्य में बदल दिया जाता है, जहां लेबल में लाइन टूटना समस्याग्रस्त हो सकता है। या ... मैं आईबी का दुरुपयोग कर सकता हूं! शायद आईबी के भीतर ऑटो-आकार के लेबल होने से यह हल करने की तुलना में अधिक समस्याएं पैदा करता है? (इसके अलावा, आप इस बिंदु पर साइज़ टाइप भी नहीं कर सकते हैं।)
जो डी 'एंड्रिया

"0" चीज़ मुझे UILabel के लिए डॉक्स से मिली, जो एक दोस्त से कई वर्षों से इंटरफ़ेस-बिल्डर का उपयोग कर रहा था।
केंडल हेल्मेस्सटर गेलनर

3
+1 "ऑल्ट-रिटर्न" का उल्लेख करने के लिए एकमात्र उत्तर होने के लिए। विशेष रूप से "ctrl-return" ऐसा लगता है कि यह काम करने जा रहा है लेकिन ऐसा नहीं है।
पैलमेलनिकोव

52

सबसे अच्छा समाधान जो मैंने पाया है (अन्यथा एक निराशाजनक समस्या जिसे फ्रेमवर्क में हल किया जाना चाहिए था) वैकिक के समान है।

बस आईबी या कोड में 0 से लाइनों की संख्या निर्धारित करें

myLabel.numberOfLines = 0;

यह आवश्यक रेखाओं को प्रदर्शित करेगा लेकिन लेबल को फिर से प्रदर्शित करेगा ताकि इसका केंद्र क्षैतिज रूप से हो (ताकि 1 पंक्ति और 3 पंक्ति लेबल उनके क्षैतिज स्थिति में संरेखित हो)। उस जोड़ने को ठीक करने के लिए:

CGRect currentFrame = myLabel.frame;
CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; 
currentFrame.size.height = expected.height;
myLabel.frame = currentFrame;

मेरी क्वेरी को आप और @Ili Suzdalnitski की मदद से हल करें। बहुत बहुत धन्यवाद।
मिहिर ओझा

33

इसमें टेक्स्ट की कई पंक्तियों का उपयोग करें UILabel:

textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;

स्विफ्ट:

textLabel.lineBreakMode = .byWordWrapping
textLabel.numberOfLines = 0


16

अगर आपको इसका उपयोग करना है:

myLabel.numberOfLines = 0;

प्रॉपर्टी आप एक मानक लाइन ब्रेक का उपयोग कर सकते हैं ("\n"), कोड में, एक नई लाइन को मजबूर करने के लिए।


15

आप उपयोग कर सकते हैं \r, जबकि भरने अगली पंक्ति में जाना UILabelका उपयोग कर NSString

UILabel * label;


label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];


11
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;

उपरोक्त समाधान मेरे मामले में काम नहीं करता है। मैं इस तरह कर रहा हूँ:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // ...

    CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
    return size.height + 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        // ...
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.textLabel.numberOfLines = 0;
        cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
    }

    // ...

    UILabel *textLabel = [cell textLabel];
    CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
                                        constrainedToSize:CGSizeMake(240.0, 480.0)
                                            lineBreakMode:UILineBreakModeWordWrap];

    cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);

    //...
}


8

स्विफ्ट 3
डायनामिक टेक्स्ट जानकारी के लिए लाइनों की संख्या शून्य सेट करें, यह अलग-अलग टेक्स्ट के लिए उपयोगी होगा।

var label = UILabel()
let stringValue = "A label\nwith\nmultiline text."
label.text = stringValue
label.numberOfLines = 0
label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame

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


1
थैंक यू क्रुनाल यह मेरे लिए काम कर रहा है!
योगेश पटेल

6
UILabel *helpLabel = [[UILabel alloc] init];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
helpLabel.attributedText = attrString;
// helpLabel.text = label;

helpLabel.textAlignment = NSTextAlignmentCenter;
helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
helpLabel.numberOfLines = 0;

कुछ कारणों से आईओएस 6 में मेरे लिए काम नहीं करना सुनिश्चित नहीं है कि क्यों। बिना किसी जिम्मेदार पाठ के साथ इसे आज़माया। कोई सुझाव।



3

इन चीजों ने मेरी मदद की

UILabel के इन गुणों को बदलें

label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;

और इनपुट देते समय String यूज़ \ n को अलग-अलग लाइन में अलग-अलग शब्द प्रदर्शित करने के लिए।

उदाहरण :

 NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;

3

विधि 1:

extension UILabel {//Write this extension after close brackets of your class
    func lblFunction() {
        numberOfLines = 0
        lineBreakMode = .byWordWrapping//If you want word wraping
        //OR
        lineBreakMode = .byCharWrapping//If you want character wraping
    }
}

अब ऐसे ही कॉल करें

myLbl.lblFunction()//Replace your label name 

पूर्व:

Import UIKit

class MyClassName: UIViewController {//For example this is your class. 

    override func viewDidLoad() {
    super.viewDidLoad()

        myLbl.lblFunction()//Replace your label name 

    }

}//After close of your class write this extension.

extension UILabel {//Write this extension after close brackets of your class
    func lblFunction() {
        numberOfLines = 0
        lineBreakMode = .byWordWrapping//If you want word wraping
        //OR
        lineBreakMode = .byCharWrapping//If you want character wraping
    }
}

विधि 2:

प्रोग्राम के रूप में

yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping//If you want word wraping
//OR
yourLabel.lineBreakMode = .byCharWrapping//If you want character wraping

विधि 3:

स्टोरी बोर्ड के माध्यम से

0 (शून्य) सेट की गई कई लाइनों को प्रदर्शित करने के लिए, यह आपके लेबल में एक से अधिक लाइन प्रदर्शित करेगा।

यदि आप n लाइनें प्रदर्शित करना चाहते हैं, तो n सेट करें।

स्क्रीन के नीचे देखें।

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

यदि आप लेबल के लिए न्यूनतम फ़ॉन्ट आकार सेट करना चाहते हैं तो ऑटोश्रंक पर क्लिक करें और न्यूनतम फ़ॉन्ट आकार विकल्प चुनें

स्क्रीन के नीचे देखें

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

यहां न्यूनतम फ़ॉन्ट आकार सेट करें

EX: 9 (इस छवि में)

यदि आपके लेबल को उस समय अधिक पाठ मिलता है, तो आपका लेबल पाठ 9 तक सिकुड़ जाएगा

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



2

आप स्टोरीबोर्ड के माध्यम से भी ऐसा कर सकते हैं:

  1. दृश्य नियंत्रक पर लेबल का चयन करें
  2. गुण निरीक्षक में, लाइन विकल्प का मान बढ़ाएँ (गुण निरीक्षक दिखाने के लिए Alt + Cmd + 4 दबाएँ)
  3. दृश्य नियंत्रक में लेबल पर डबल क्लिक करें और अपना पाठ लिखें या पेस्ट करें
  4. लेबल का आकार बदलें और / या फ़ॉन्ट का आकार बढ़ाएँ ताकि पूरा पाठ दिखाया जा सके

और लाइन्स को 0 पर सेट करें, अन्यथा यह केवल पाठ दिखाएगा जिसे निर्दिष्ट लाइनों की संख्या में डाला जा सकता है, दूसरों को छोड़ दिया जाएगा।
toing_toing

2

आपको यह कोशिश करनी चाहिए:

-(CGFloat)dynamicLblHeight:(UILabel *)lbl
{
    CGFloat lblWidth = lbl.frame.size.width;
    CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                            attributes:@{NSFontAttributeName:lbl.font}
                                               context:nil];
    return lblTextSize.size.height;
}


1

पहले से ही उत्तर दिया गया है, लेकिन आप इसे स्टोरीबोर्ड में मैन्युअल रूप से भी कर सकते हैं। लेबल के लिए गुण निरीक्षक के तहत, आप लाइन ब्रेक्स को वर्ड रैप (या कैरेक्टर रैप) में बदल सकते हैं।


1

इस फ़ंक्शन पास स्ट्रिंग में जिसे आप लेबल में असाइन करना चाहते हैं और 235 के स्थान पर self.activityFont के स्थान पर फ़ॉन्ट आकार और लेबल चौड़ाई पास करते हैं, अब आपको अपने स्ट्रिंग के अनुसार लेबल ऊंचाई मिलती है। यह ठीक काम करेगा।

-(float)calculateLabelStringHeight:(NSString *)answer
{
    CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
    return textRect.size.height;

}

1

नीचे या तो कोड में या स्टोरीबोर्ड में सेट करें

Label.lineBreakMode = NSLineBreakByWordWrapping; लेबल.नंबरऑफलाइन = 0;

और लेबल के लिए बाएं, दाएं, ऊपर और नीचे की बाधाओं को सेट करना न भूलें अन्यथा यह काम नहीं करेगा।


हर जगह यह शब्द रैप और no.of लाइनों को 0. पर सेट करने के लिए कहता है लेकिन फिर भी मेरा रैप नहीं हुआ। बायाँ, ऊपर, नीचे और दायाँ अवरोध स्थापित करते हुए इसे लपेट दिया।
anoo_radha

1

स्विफ्ट 4:

label.lineBreakMode = .byWordWrapping

label.numberOfLines = 0

label.translatesAutoresizingMaskIntoConstraints = false

label.preferredMaxLayoutWidth = superview.bounds.size.width - 10 

0

C # पर, इसने मेरे लिए UITableViewCell के अंदर काम किया।

        UILabel myLabel = new UILabel();
        myLabel.Font = UIFont.SystemFontOfSize(16);
        myLabel.Lines = 0;
        myLabel.TextAlignment = UITextAlignment.Left;
        myLabel.LineBreakMode = UILineBreakMode.WordWrap;
        myLabel.MinimumScaleFactor = 1;
        myLabel.AdjustsFontSizeToFitWidth = true;

       myLabel.InvalidateIntrinsicContentSize();
       myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
       myCell.ContentView.AddSubview(myLabel);

मुझे लगता है कि यहाँ बिंदु है: -

            myLabel.TextAlignment = UITextAlignment.Left;
            myLabel.LineBreakMode = UILineBreakMode.WordWrap;
            myLabel.MinimumScaleFactor = 1;
            myLabel.AdjustsFontSizeToFitWidth = true;

-2

यह कोड पाठ के अनुसार आकार की ऊंचाई पर लौट रहा है

+ (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
 {
    CGFloat result = font.pointSize+4;
    if (text) 
{
        CGSize size;

        CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:@{NSFontAttributeName:font}
                                          context:nil];
        size = CGSizeMake(frame.size.width, frame.size.height+1);
        result = MAX(size.height, result); //At least one row
    }
    return result;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.