ইউআইএলবেলে একাধিক লাইনের পাঠ্য


443

লেখার UILabelমতো একাধিক লাইন রাখার উপায় কি এর UITextViewপরিবর্তে আমার দ্বিতীয়টি ব্যবহার করা উচিত?


5
লক্ষ্য করুন UILineBreakModeWordWrapআইওএস 6-এ অসমর্থিত হয়েছে আপনি এখন ব্যবহার করা উচিত NSLineBreakByWordWrapping = 0ডকুমেন্টেশন দেখুন এখানে
অস্টিন

এই প্রশ্নটি পরীক্ষা 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;  

পুরাতন উত্তর পুনরুদ্ধার করা হয়েছে (রেফারেন্সের জন্য এবং below.০ এর নীচে আইওএস সমর্থন করতে আগ্রহী ডেভস):

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

পাশে: উভয় এনাম মানগুলি 0যেভাবেই লাভ করে।


16
ইউআইলাইনব্রেইকমোডওয়ার্ড ওয়ার্প আসলে ডিফল্ট তাই আপনার প্রথম লাইনের প্রয়োজন নেই।
জারার্ড ওলসন

1
যারা cell.textLabel?.lineBreakMode = NSLineBreakMode.ByWordWrappingcell.textLabel?.numberOfLines = 0
সুইফ্ট

5
জামারিন-কোড সরবরাহ করার জন্য ধন্যবাদ স্বতঃসম্পূর্ণতা কাজ করেনি কারণ তারা সেই সম্পত্তিটির সংক্ষিপ্তসার বেছে নিয়েছিল ... +1
জান গিলিচ

আমি সম্মত jarred ওলসন সঙ্গে, NSLineBreakByWordWrapping হয় ডিফল্ট । আমি সংশোধন করার জন্য গুরুমুর্তি আরুমুগমের গাইডের মতো সম্পত্তি আকার টোফিট যুক্ত করেছি। আপনি যদি চান আপনার লেবেলের ভিতরে থাকা ফন্টটি লেবেলের সীমানার সাথে নিজেকে ফিট করতে পারে। আপনি ব্যবহার করতে পারেন: textLabel.adjustsFontSizeToFitWidth = হ্যাঁ; সবাইকে ধন্যবাদ.
রায়ান ট্রান

@ জারেড ওলসন ডক্স বলছেন "এই সম্পত্তিটি ডিফল্টরূপে ট্র্যাঙ্কেটিং টেইলে সেট করা আছে।"
বিল

138

আইবিতে, 0 টি লাইনের সংখ্যা নির্ধারণ করুন (সীমাহীন লাইনের অনুমতি দেয়)

আইবি ব্যবহার করে পাঠ্য ক্ষেত্রের মধ্যে টাইপ করার সময়, কোনও রিটার্ন সন্নিবেশ করতে "Alt-রিটার্ন" ব্যবহার করুন এবং পরবর্তী লাইনে যান (বা আপনি ইতিমধ্যে লাইন দ্বারা পৃথক পৃথক পাঠ্যে অনুলিপি করতে পারেন)।


1
[যেহেতু তিনি জেনেশুনে এক বছরেরও বেশি পুরনো থ্রেডটি খনন করেছেন ...] আমার মাঝে মাঝে ইচ্ছা হয় যে আমি আইবিতে করতে পারি এমবেডড লাইন ব্রেক ছাড়াই পাঠ্য প্রবেশ করানো , ইউআইলাইনব্রেইকমোডওয়ার্ড ওয়ার্যাপ এবং নম্বর অফলাইনস = 0 সেট করুন এবং তারপরে লেবেলটি স্বয়ংক্রিয় করুন উচ্চতা স্বয়ংক্রিয়ভাবে আকার দিন, এখনও আইবিতে ডিজাইন করার সময়। আমি সেই ক্ষেত্রে ভাবছি যেখানে দৃশ্যটি আড়াআড়িতে পুনরায় আকার দেওয়া হয়েছে, যেখানে লেবেলটিতে লাইন বিচ্ছিন্নতা সমস্যাযুক্ত হতে পারে। বা ... আমি আইবির অপব্যবহার হতে পারে! সম্ভবত আইবিতে স্বয়ংক্রিয় আকারের লেবেল থাকার কারণে এটি সমাধানের চেয়ে আরও বেশি সমস্যার সৃষ্টি করে? (এছাড়াও, আপনি যাইহোক এই মুহুর্তে আকারে তোলাফের আবেদন করতে পারবেন না))
জো

ইউিলাবেলের জন্য ডক্স থেকে আমি "0" জিনিসটি পেয়েছি, বহু বছর ধরে ইন্টারফেস বিল্ডার ব্যবহার করে এমন এক বন্ধুর কাছ থেকে Alt-ফেরত।
কেন্ডাল হেলস্টেটার জেলনার

3
"Alt-return" উল্লেখ করার একমাত্র উত্তর হিসাবে +1 1 বিশেষত "সিটিআরটিএল-রিটার্ন" মনে হচ্ছে এটি কাজ করে যাচ্ছে কিন্তু তা করে না।
পৌলমনিকো

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;

আপনার এবং @ ইলিয়া সুজডালনিটস্কির সহায়তায় আমার প্রশ্নের সমাধান করুন। অনেক ধন্যবাদ.
মিহির ওজা

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 কেন তা নিশ্চিত নয়। এটি বিশিষ্ট পাঠ্য সহ এবং ছাড়া চেষ্টা করে। কোন পরামর্শ.


6

এটি ব্যবহার করার চেষ্টা করুন:

lblName.numberOfLines = 0;
[lblName sizeToFit];

সংখ্যাঅফলাইন 0 এর চেয়ে আলাদা হলে সাইজটিফিট কাজ করে না। এটি আকর্ষণীয়।
ওনুর টুনা

3

এই জিনিসগুলি আমাকে সাহায্য করেছিল

ইউআইএলবেলের এই বৈশিষ্ট্যগুলি পরিবর্তন করুন

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

এবং ইনপুট দেওয়ার সময় স্ট্রিং lines 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 

গো EX:

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 (জিরো) প্রদর্শন করতে, এটি আপনার লেবেলে একাধিক লাইন প্রদর্শন করবে।

আপনি যদি এন লাইনগুলি প্রদর্শন করতে চান তবে এন সেট করুন।

নীচে পর্দা দেখুন।

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি লেবেলের জন্য ন্যূনতম ফন্টের আকার সেট করতে চান তবে অটোশ্রিংকে ক্লিক করুন এবং ন্যূনতম ফন্টের আকার নির্বাচন করুন

নীচে পর্দা দেখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে ন্যূনতম ফন্টের আকার নির্ধারণ করুন

EX: 9 (এই চিত্রটিতে)

যদি আপনার লেবেলটি আরও পাঠ্য পেয়ে থাকে তবে আপনার লেবেল পাঠ্য 9 অবধি সঙ্কুচিত হবে

এখানে চিত্র বর্ণনা লিখুন


2
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];

যুক্ত করতে ভুলবেন না: [লেবেলনেম সেটলাইনব্র্যাকমোড: এনএসলাইনব্রেইকবাই ওয়ার্ড র্যাপিং];
ইরিনু ফিলোহো

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 এর স্থানে লেবেলের প্রস্থটি পাস করতে চান, এখন আপনি আপনার স্ট্রিং অনুযায়ী লেবেলের উচ্চতা পাবেন। এটা ঠিক কাজ করবে।

-(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; Label.numberOfLines = 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

সি # তে, এটি ইউআইটিএবলভিউসিলের মধ্যে আমার জন্য কাজ করেছে।

        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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.