পাঠ্য দৈর্ঘ্যের উপর নির্ভর করে কীভাবে ইউআইএলবেল প্রস্থ গণনা করবেন?


142

আমি একটি ইউআইএলবেলের পাশে একটি চিত্র প্রদর্শন করতে চাই, তবে ইউআইএলবেলের পরিবর্তনশীল পাঠ্যের দৈর্ঘ্য রয়েছে, তাই ছবিটি কোথায় রাখবেন তা আমি জানি না। আমি কীভাবে এটি সম্পাদন করতে পারি?

উত্তর:


191
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                        constrainedToSize:maximumLabelSize 
                        lineBreakMode:yourLabel.lineBreakMode]; 

কী - [এনএসএস স্ট্রিং সাইজ উইথফন্ট: ফর উইথথ: লাইনব্রেকমোড:] ভাল?

এই প্রশ্নের আপনার উত্তর থাকতে পারে, এটি আমার পক্ষে কাজ করে।


2014 এর জন্য, আমি নীচে নরবার্টের অতি-কার্যকর মন্তব্যের ভিত্তিতে এই নতুন সংস্করণে সম্পাদনা করেছি! এটি সবকিছু করে। চিয়ার্স

// yourLabel is your UILabel.

float widthIs = 
 [self.yourLabel.text
  boundingRectWithSize:self.yourLabel.frame.size                                           
  options:NSStringDrawingUsesLineFragmentOrigin
  attributes:@{ NSFontAttributeName:self.yourLabel.font }
  context:nil]
   .size.width;

NSLog(@"the width of yourLabel is %f", widthIs);

41
কেবলমাত্র একটি দ্রষ্টব্য: এটি iOS7 এর পরে অবচিত করা হয়েছে। এখন পছন্দের উপায় হ'ল:[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
নরবার্ট

17
আপনি ইন্টার্নসিক কন্টেন্টসাইজ সম্পত্তিটিও ব্যবহার করতে পারেন। আমি উদ্দেশ্যমূলক-সি তে খুব বেশি নই, তবে এটি এমন কিছু হওয়া উচিত: self.yourLabel.intrinsicContentSize এটি আপনাকে লেবেলের সামগ্রীর আকার দেবে, আপনি সেখান থেকে প্রস্থটি পেতে পারেন।
বরিস

1
কেবল yourLabel.intrinsicContentSize.widthদুর্দান্ত কাজ করে, নীচের উত্তরটি চেক করুন।
denis_lor

155

yourLabel.intrinsicContentSize.widthউদ্দেশ্য-সি / সুইফ্টের জন্য for


আমার জন্য কাজ করবেন না এটি তাদের পাঠ্যের ভিত্তিতে লেবেলের প্রস্থের উচ্চতা গণনা করছে না
চাঁদনী

1
আমার জন্য কাস্টম ফন্টের সাথেও পুরোপুরি কাজ করে!
fl034

1
গতিশীল লেবেলের প্রস্থ পাওয়ার জন্য নিখুঁত উত্তর
চেতান

52

দ্রুত

 yourLabel.intrinsicContentSize().width 

3
এই উত্তরটি শুধুমাত্র একটি দৃশ্য যে পাড়া হয়েছে জন্য বৈধ
rommex

33

নির্বাচিত উত্তরটি আইওএস 6 এবং নীচের জন্য সঠিক।

আইওএস 7-এ, অবচিতsizeWithFont:constrainedToSize:lineBreakMode: করা হয়েছে । এটি এখন আপনার ব্যবহারের পরামর্শ দেওয়া হচ্ছে ।boundingRectWithSize:options:attributes:context:

CGRect expectedLabelSize = [yourString boundingRectWithSize:sizeOfRect
                                                    options:<NSStringDrawingOptions>
                                                 attributes:@{
                                                    NSFontAttributeName: yourString.font
                                                    AnyOtherAttributes: valuesForAttributes
                                                 }
                                                    context:(NSStringDrawingContext *)];

লক্ষ্য করুন যে রিটার্ন মান একটি CGRectনয় CGSize। আশা করি এটি আইওএস 7 এ ব্যবহার করা লোকদের কিছুটা সহায়তা করবে।


12

IOS8 আকারে উইথফন্টটি অবচিত করা হয়েছে, দয়া করে উল্লেখ করুন

CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];

আপনি আকারে যা চান তার সমস্ত বৈশিষ্ট্য যুক্ত করতে পারেনঅ্যাট্রিবিউটস সহ। অন্যান্য বৈশিষ্ট্য আপনি সেট করতে পারেন:

- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName

ইত্যাদি। তবে সম্ভবত আপনার অন্যের দরকার হবে না


10

সুইফট 4 উত্তর যারা প্রতিবন্ধকতা ব্যবহার করছে

label.text = "Hello World"

var rect: CGRect = label.frame //get frame of label
rect.size = (label.text?.size(attributes: [NSFontAttributeName: UIFont(name: label.font.fontName , size: label.font.pointSize)!]))! //Calculate as per label font
labelWidth.constant = rect.width // set width to Constraint outlet

সুইফট 5 উত্তর যারা প্রতিবন্ধকতা ব্যবহার করছে

label.text = "Hello World"

var rect: CGRect = label.frame //get frame of label
rect.size = (label.text?.size(withAttributes: [NSAttributedString.Key.font: UIFont(name: label.font.fontName , size: label.font.pointSize)!]))! //Calculate as per label font
labelWidth.constant = rect.width // set width to Constraint outlet

1
গ্রেট! পাঠ্য অনুযায়ী UIButton এর প্রস্থ গণনা করার জন্য সুবিধাজনক, যেখানে অন্তর্নিবিজ্ঞাস্তে.উইথথ সর্বদা সঠিকভাবে কাজ করে না।
মনোনীত

8
CGRect rect = label.frame;
rect.size = [label.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:label.font.fontName size:label.font.pointSize]}];
label.frame = rect;

2
এটি প্রশ্নের উত্তর সরবরাহ করে না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন - আপনি সর্বদা আপনার নিজের পোস্টে মন্তব্য করতে পারেন, এবং আপনার যথেষ্ট সুনামের পরে আপনি কোনও পোস্টে মন্তব্য করতে সক্ষম হবেন ।
নমুনা

এই উত্তরটি পাঠ্য অনুযায়ী লেবেলের আকারকে কীভাবে সামঞ্জস্য করবে তা বলুন। এতে সমস্যা কী?
মধু লখানি

2

হারুনের লিঙ্ক সহ কয়েকটি এসও পোস্টের কয়েকটি নীতি প্রয়োগ করার পরে আমি এখানে কিছু জিনিস এনেছি:

    AnnotationPin *myAnnotation = (AnnotationPin *)annotation;

    self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
    self.backgroundColor = [UIColor greenColor];
    self.frame = CGRectMake(0,0,30,30);
    imageView = [[UIImageView alloc] initWithImage:myAnnotation.THEIMAGE];
    imageView.frame = CGRectMake(3,3,20,20);
    imageView.layer.masksToBounds = NO;
    [self addSubview:imageView];
    [imageView release];

    CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
    CGRect newFrame = self.frame;
    newFrame.size.height = titleSize.height + 12;
    newFrame.size.width = titleSize.width + 32;
    self.frame = newFrame;
    self.layer.borderColor = [UIColor colorWithRed:0 green:.3 blue:0 alpha:1.0f].CGColor;
    self.layer.borderWidth = 3.0;

    UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(26,5,newFrame.size.width-32,newFrame.size.height-12)];
    infoLabel.text = myAnnotation.title;
    infoLabel.backgroundColor = [UIColor clearColor];
    infoLabel.textColor = [UIColor blackColor];
    infoLabel.textAlignment = UITextAlignmentCenter;
    infoLabel.font = [UIFont systemFontOfSize:12];

    [self addSubview:infoLabel];
    [infoLabel release];

এই উদাহরণে, আমি একটি এমকেএনোটেশন ক্লাসে একটি কাস্টম পিন যুক্ত করছি যা পাঠ্যের আকার অনুসারে একটি ইউআইএলবেলকে আকার দেয়। এটি দৃশ্যের বাম দিকে একটি চিত্র যুক্ত করে, তাই আপনি কিছু কোডটি চিত্র এবং প্যাডিং পরিচালনা করার জন্য যথাযথ ব্যবধান পরিচালনা করে দেখেন।

কীটি হল ব্যবহারের CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];এবং তারপরে দর্শনের মাত্রাগুলি পুনরায় সংজ্ঞায়িত করা। এই যুক্তি আপনি যে কোনও ভিউতে প্রয়োগ করতে পারেন।

যদিও হারুনের উত্তর কারও কারও পক্ষে কার্যকর, তা আমার পক্ষে কার্যকর হয়নি। এটি একটি আরও বিস্তৃত ব্যাখ্যা যা আপনি যদি কোনও চিত্র এবং আকার পরিবর্তনযোগ্য UILabel সহ আরও গতিশীল দৃষ্টিভঙ্গি চান তবে অন্য কোথাও যাওয়ার আগে অবিলম্বে চেষ্টা করা উচিত। আমি ইতিমধ্যে আপনার জন্য সমস্ত কাজ !!

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