UILabel লেবেল আকারের সাথে মানানসই পাঠ্যটি স্বয়ংক্রিয়ভাবে সঙ্কুচিত করা হয় না


119

আমার কাছে এই বিস্ময়কর সমস্যা রয়েছে এবং আমি এখন এটি 8 ঘন্টারও বেশি সময় ধরে কাজ করছি .. পরিস্থিতির উপর নির্ভর করে আমাকে UILabelsগতিশীল আকারের আকার গণনা করতে হবে ,
যেমন
আমার UIViewControllerএকটি ইভেন্ট আসে এবং আমি UILabelsআকার পরিবর্তন করি । বড় থেকে ছোট। আমার আকার UILabelছোট হয় এবং আমি সঠিকভাবে প্রয়োজনীয় আকার পাই তবে আমার পাঠ্যটি UILabelএকই থাকে, একই ফন্টের আকার এবং ইত্যাদি I পুরো পাঠ্যটি ফিট করার জন্য আমার ফন্টটি আরও ছোট হতে হবে UILabel। সুতরাং প্রশ্নটি কীভাবে আমার লেবেলের সাথে এই জাতীয় কোনও কিছুর সাথে টেক্সট তৈরি করতে হয় autoshrinking?

আমার সালে xib, UILabels autoshrinkপরীক্ষা করা হয়, এছাড়াও লাইনের সংখ্যা 0 সেট করা হয়, এবং এছাড়াও আমার স্ট্রিং নতুন লাইন প্রতীক (\ ঢ), এবং আমি নির্বাচন করেছেন linebreakmode করতে wordwrap। আমি এখন যেমন ছিলাম তেমন কেউ কেউ থাকতে পারে এবং আমাকে সাহায্য করতে পারে? আমি সত্যিই প্রশংসা করব।

আগাম ধন্যবাদ!

সম্পাদনা: UILabel ন্যূনতম ফন্টের আকার 10 এ সেট করা হয়েছে


আপনার সেট করা লেবেলের জন্য আপনার হরফের ন্যূনতম আকারটি দয়া করে যুক্ত করুন।
এজেপ্যাটেল

উত্তর:


159

আপনি যদি এখনও আরও ভাল সমাধানের সন্ধান করেন তবে আমি মনে করি এটিই আপনি চান:

একটি বুলিয়ান মান এটি নির্দেশ করে যে লেবেলের সীমানা আয়তক্ষেত্রে শিরোনামের স্ট্রিংটি ফিট করার জন্য ফন্টের আকার হ্রাস করা উচিত the (সম্পত্তিটি numberOfLines1 তে সেট করা থাকলেই এই সম্পত্তি কার্যকর হবে )।

এই সম্পত্তিটি minimumScaleFactorসেট করার সময়, খুব সেট করা আবশ্যক (একটি ভাল ডিফল্ট ০.০)।

দ্রুতগতি

var adjustsFontSizeToFitWidth: Bool { get set }

উদ্দেশ্য গ

@property(nonatomic) BOOL adjustsFontSizeToFitWidth;

একটি বুলিয়ান মান এটি নির্দেশ করে যে লেবেলের সীমানা আয়তক্ষেত্রের মধ্যে স্ট্রিংয়ের সাথে ফিট করার জন্য অক্ষরের মধ্যে ব্যবধানকে সামঞ্জস্য করা উচিত কিনা।

দ্রুতগতি

var allowsDefaultTighteningForTruncation: Bool { get set }

উদ্দেশ্য গ

@property(nonatomic) BOOL allowsDefaultTighteningForTruncation;

উত্স


18
সিডনোট হিসাবে, minimumFontSizeআইওএস 6.0 এ অবমূল্যায়ন করা হয়। minimumScaleFactorপরিবর্তে ব্যবহার করুন।
লেসটার

14
হ্যাঁ অটো সঙ্কোচিত ইউআইএলবেলে একাধিক লাইনের জন্য কাজ করে না। এটি কল্পনা করার চেষ্টা করুন: আপনার একাধিক লাইনের সাথে পাঠ্য রয়েছে, আপনি এটি সঙ্কুচিত করতে চান যাতে এটি প্রস্থের সাথে "ফিট" হয়। সুতরাং এটি কি পুরো পাঠ্যকে একটি লাইনে ফিট করার জন্য সঙ্কুচিত করা উচিত, বা শব্দগুলি একই লাইনে থাকবে এবং প্রতিটি প্রস্থের সাথে মানানসই সঙ্কুচিত হবে? দ্বিতীয়টি সর্বাধিক সাধারণ ক্ষেত্রে, তবে ভুলে যাবেন না যে শব্দগুলি একাধিক লাইনে নিজেকে সাজানোর জন্যও সেট করা আছে। এমনকি যদি পাঠ্যের স্ব-বিন্যাস অক্ষম করা থাকে তবে আপনাকে পাঠ্যটির প্রতিটি লাইনের বিভিন্ন ফন্টের আকারের মুখোমুখি হতে হবে, কারণ প্রতিটি শব্দ প্রস্থের সাথে খাপ খায় না।
লেস্টার

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

1
আচ্ছা হ্যাঁ এটি একটি ভাল পয়েন্ট, তবে যাইহোক, আমি মনে করি যদি আমি লাইন সংখ্যা 0 তে সেট করি, তবে এটির মতো পরিষ্কার বক্তব্য রয়েছে যে সেখানে এক বা একাধিক লাইন থাকতে পারে। এবং অটোশ্রিংক আমার অনুমানের লাইন সংখ্যাগুলি দ্বারা নির্ধারিত হতে পারে .. তবে যাইহোক, জিনিসগুলি সাফ করার জন্য ধন্যবাদ। আমি ভেবেছিলাম আমি কিছু ভুল করছি। একটি শ্রেণীবদ্ধ একটি ভাল ধারণা, আমি অনুমান করি যে আমি অন্যান্য প্রকল্পে এটি করতে যাচ্ছি যেখানে আমার এটির প্রয়োজন হবে। আপনার সহায়তার প্রশংসা করুন, শুভকামনা;)
লুকাস

4
@ লেস্টার এটি সঙ্কুচিত হওয়া উচিত যাতে লেবেলের বর্তমান মাত্রাগুলি প্রদত্ত ঘোষিত লাইনের সংখ্যায় পুরো পাঠ্যটি দৃশ্যমান হয়। প্রতিটি লাইনকে আলাদা আকারের করার চেষ্টা করার দরকার নেই। আমি সত্যিই অবাক হই এটি এটিকে বুঝতে পারে না। সুতরাং আমার কাছে প্রদর্শন করার জন্য যদি আমার একটি (সম্ভাব্য) দীর্ঘ স্ট্রিং থাকে তবে আমি হয় একাধিক লাইন রাখতে পারি বা এটির স্বয়ংক্রিয় আকার থাকতে পারি, উভয়ই নয়। যে আনন্দদায়ক.
ডিভাইস 1

125

Autoshrinkআইওএস 9.2, এক্সকোড 7.2-এ আমি ইউআইএলবেলের কাজ (বিশেষত 6 এস প্লাস স্টোরিবোর্ড থেকে 4 এস ডিভাইসে লেবেল ফন্ট ফিটিংগুলির উচ্চতার জন্য ) এইভাবে পাই ...

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

  • লাইনের সংখ্যা 0
  • লাইন ব্রেক: ক্লিপ
  • স্বতঃলিঙ্ক: সর্বনিম্ন ফন্টের স্কেল 0.25

15
এই লেবেলটি সঙ্কুচিত হওয়ার জন্য প্রয়োজনীয় 3 টি উপাদান, আমি ক্লিপ লাইন ব্রেক সেটিংটি অনুপস্থিত। এছাড়াও, যদি এটির অন্যান্য লেবেলের সংলগ্ন (এটি স্বয়ংক্রিয়ভাবে সঙ্কুচিতও হতে পারে) তবে সংক্ষেপণ / আলিঙ্গন অগ্রাধিকারগুলি নির্দিষ্ট স্পষ্ট প্রস্থ বা উচ্চতার সীমাবদ্ধতা সেট করা প্রয়োজন। এটি বর্তমানে গৃহীত উত্তর হওয়া উচিত।
কোরি হিন্টন

3
আমার জন্য লাইন সংখ্যাটি! ধন্যবাদ
মাইকেল

নিশ্চিত করুন যে আপনার লেবেলে সমস্ত বাধা বিশেষত নেতৃস্থানীয় এবং পিছনে রয়েছে।
মাশহাদি

2
আমি Xcode8 এ একই বিকল্পগুলির সাথে চেষ্টা করে দেখেছি এবং কাজ করছে না। কারও এই সম্পর্কে ধারণা থাকলে দয়া করে আমাকে সহায়তা করুন।
গণেশ

75

minimumFontSize আইওএস 6 এ অবমূল্যায়িত হয়েছে।

minimumScaleFactorপরিবর্তে ব্যবহার করুন minmimumFontSize

lbl.adjustsFontSizeToFitWidth = YES
lbl.minimumScaleFactor = 0.5

সুইফট 5

lbl.adjustsFontSizeToFitWidth = true
lbl.minimumScaleFactor = 0.5

ভাল উত্তর। আমার সমস্যা সমাধান। ধন্যবাদ
আব্দুল ইয়াসিন

1
@ আনটনমাতোসোভ, না, তা হয় না!
আইলিয়ান ওনোফ্রেই

2
হ্যাঁ, এটি এখন (এখন) - আপনি যদি ওয়ার্ড
র‌্যাপের

21

এছাড়াও আমার সমাধানটি বুলিয়ান লেবেল। এডজাস্টসফন্টসাইজটোফিটউইথ = হ্যাঁ; কিন্তু। আপনাকে অবশ্যই ইন্টারফেসে বিল্ডার ওয়ার্ড র‌্যাপিংয়ে " CLIP " এ যেতে হবে। তারপরে লেবেলগুলি অটোশ্রিং করুন। এই অত্যন্ত গুরুত্বপূর্ণ.


3
আমি যখন "ওয়ার্ড র‌্যাপ" থেকে "ক্লিপ" এ পরিবর্তিত হয়েছিল কেবল তখনই আমার জন্য অটোশ্রিঙ্ক কাজ করবে।
নিকজে

আমি যখন শব্দ মোড়ানো ক্লিপতে পরিবর্তন করেছি তখন আমি শূন্যরেখার সাথে একটি লেবেলে এটি আকার পরিবর্তন করতে আসলে সক্ষম হয়েছি। ছেলে এটি দস্তাবেজ থাকলে ভাল হবে।
মনোনীত

12

সুইফ্ট 3-তে (প্রোগ্রাম্যালি) আমাকে এটি করতে হয়েছিল:

let lbl = UILabel()
lbl.numberOfLines = 0
lbl.lineBreakMode = .byClipping
lbl.adjustsFontSizeToFitWidth = true
lbl.minimumScaleFactor = 0.5
lbl.font = UIFont.systemFont(ofSize: 15)

5

আপনি যেমন লিখতে পারেন

UILabel *reviews = [[UILabel alloc]initWithFrame:CGRectMake(14, 13,270,30)];//Set frame
reviews.numberOfLines=0;
reviews.textAlignment = UITextAlignmentLeft;
reviews.font = [UIFont fontWithName:@"Arial Rounded MT Bold" size:12];
reviews.textColor=[UIColor colorWithRed:0.0/255.0 green:0.0/255.0 blue:0.0/255.0 alpha:0.8]; 
reviews.backgroundColor=[UIColor clearColor];

আপনি যে মত লাইন সংখ্যা গণনা করতে পারেন

CGSize maxlblSize = CGSizeMake(270,9999);
CGSize totalSize = [reviews.text sizeWithFont:reviews.font 
              constrainedToSize:maxlblSize lineBreakMode:reviews.lineBreakMode];

CGRect newFrame =reviews.frame;
newFrame.size.height = totalSize.height;
reviews.frame = newFrame;

CGFloat reviewlblheight = totalSize.height;

int lines=reviewlblheight/12;//12 is the font size of label

UILabel *lbl=[[UILabel alloc]init];
lbl.frame=CGRectMake(140,220 , 100, 25);//set frame as your requirement
lbl.font=[UIFont fontWithName:@"Arial" size:20];
[lbl setAutoresizingMask:UIViewContentModeScaleAspectFill];
[lbl setLineBreakMode:UILineBreakModeClip];
lbl.adjustsFontSizeToFitWidth=YES;//This is main for shrinking font
lbl.text=@"HelloHelloHello";

আশা করি এটি আপনাকে :-) আপনার উত্তরটির জন্য অপেক্ষা করতে সহায়তা করবে


সুতরাং যদি আমার লেবেলে লাইন সংখ্যা নির্ধারণ করে, পাঠ্যটি তখন অটোশ্রিং করবে?
লুকাশ

যদি আপনার বিষয়বস্তু প্রস্থের বাইরে থাকে তবে এটি পরবর্তী লাইনে লাগবে
বিরজু

আরে আমি আপনার পরামর্শ মতো কাজ করেছি, কিন্তু এটি কাজ করে না, লাইনের সংখ্যা কেন আমাকে সহায়তা করবে?
লুকাস

আপনি ঠিক বলেছেন আমি এটি কার্যকর না হয়ে চেষ্টা করেছিলাম তবে আমি তার জন্য আমার পরবর্তী উত্তরটির মতো সমাধান খুঁজে পেয়েছি
বিরজু

lbl.adjustsFontSizeToFitWidth = হ্যাঁ; আমার জন্য কাজ!
বিকাশকারী

4

আচ্ছা শেষ পর্যন্ত আমি আমার উত্তর খুঁজে পেলাম না। এবং আমি মনে করি অটোশ্রিংক একাধিক লাইনের জন্য কাজ করে না। আমি এই লিঙ্কে পরামর্শটি ব্যবহার করে শেষ করেছি: একাধিক লাইনের সাহায্যে একটি ইউআইএলবেলে অটোশ্রিংক

সমাধানগুলি হ'ল প্রদত্ত প্রস্থে পাঠ্যের উচ্চতা গণনা করা এবং যদি পাঠ্য বড় হয় তবে ফন্টের আকার সঙ্কুচিত করা এবং তারপরে উচ্চতাটি আপনার প্রয়োজনীয় আকারের চেয়ে সমান বা কম না হওয়া পর্যন্ত তিনি আবার একই কাজ করেন।

কেন এটি প্রয়োগ করা এত কঠিন হওয়া উচিত তা আমি বুঝতে পারি না। যদি আমি কিছু মিস করছি তবে সবাই আমাকে সংশোধন করতে স্বাগত :)


এখানে অন্যান্য উত্তর অনুসারে, মূল জিনিসটি অনুপস্থিত ছিল যে আপনাকে ওয়ার্ড র‍্যাপিংটি "ক্লিপ" এ সেট করতে হবে। এটি পাল্টা স্বজ্ঞাত, তবে এটি আপনার নিজের মতো করে স্বয়ংক্রিয়ভাবে সঙ্কুচিত করার জন্য একটি ইউআইএলবেল পাওয়া দরকার। এটি একটি বহু-লাইন UILabel এর সাথে কাজ করে।
ডানকান ব্যাবেজ

4

এটি সুইফট 3 চলমান এক্সকোড 8.2.1 (8C1002) এর জন্য

আমি যে সর্বোত্তম সমাধানটি পেয়েছি তা হ'ল লেবেলে আপনার স্টোরিবোর্ডে বা আইবিতে একটি নির্দিষ্ট প্রস্থ স্থাপন করা। মার্জিনের সীমাবদ্ধতার সাথে আপনার সীমাবদ্ধতাগুলি সেট করুন। আপনার ভিউডিলডে কোডের নিম্নলিখিত লাইনগুলি যুক্ত করুন:

override func viewDidLoad() {
            super.viewDidLoad()

            label.numberOfLines = 1
            label.adjustsFontSizeToFitWidth = true
            label.minimumScaleFactor = 0.5
        }

মার্জিন লেবেল সীমাবদ্ধতা

প্রস্থের নির্দিষ্ট প্রস্থের লেবেলের সীমাবদ্ধতা

বৈশিষ্ট্য পরিদর্শক

এটি একটি কবজির মতো কাজ করেছে এবং এটি কোনও নতুন লাইনে উপচে পড়ছে না এবং কোনও অদ্ভুত সমস্যা ছাড়াই লেবেলের প্রস্থে ফিট করার জন্য পাঠ্য সঙ্কুচিত করে এবং সুইফ্ট 3-এ কাজ করে।


4

এটি একটি দুর্দান্ত প্রশ্ন, কারণ এটি মনে হয় যে এটি এখন পর্যন্ত বিল্ট-ইন UIKitকার্যকারিতা বা কোনও সম্পর্কিত কাঠামোর অংশ হবে । এই প্রশ্নের একটি ভাল ভিজ্যুয়াল উদাহরণ এখানে:

হরফ আকার পরিবর্তন অ্যানিমেশন

এর চারপাশে কোনও সহজ উপায় নেই তবে এটি অবশ্যই সম্ভব। এটি করার একটি উপায় হ'ল প্রোগ্রামের দিক থেকে বিভিন্ন ফন্টের আকারগুলি পরীক্ষা করা পর্যন্ত আপনি দেখার সীমাটির সাথে যুক্তিসঙ্গতভাবে ফিট করে এমন কোনও সন্ধান করেন না। বা এর boundingRect()ফাংশন দিয়ে আপনি এটি সম্পাদন করতে পারেন । উদাহরণ স্বরূপ:NSStringNSAttributedString

let string = "This is a test"
let infiniteSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height:CGFloat.greatestFiniteMagnitude)
let size = string.boundingRect(with: infiniteSize, options: [], attributes: [.font: UIFont.systemFont(ofSize: avgSize)] context: nil).size

সম্পূর্ণ ব্রেস্ট ফোর্সের পদ্ধতির চেয়ে দক্ষ হওয়ার জন্য আপনি বাইনারি অনুসন্ধান করতে পারেন। সঠিক শব্দ মোড়ানো এবং আইওএস ফন্ট ক্যাশে পারফরম্যান্স সহ কিছুটা বিবেচনা রয়েছে যা আপনি যদি সত্যই শক্তিশালী কিছু সন্ধান করেন।

আপনি যদি কেবলমাত্র সহজ উপায়ে স্ক্রিনে পাঠ্যটি দেখানোর বিষয়ে চিন্তা করেন তবে আমি সুইফটে একটি দৃ implementation় বাস্তবায়ন তৈরি করেছি, যা আমি একটি প্রোডাকশন অ্যাপেও ব্যবহার করছি using এটি UIViewএকাধিক লাইন সহ যে কোনও ইনপুট পাঠ্যের জন্য দক্ষ, স্বয়ংক্রিয় ফন্ট স্কেলিং সহ একটি সাবক্লাস। এটি ব্যবহার করতে, আপনি কেবল কিছু করতে চাইবেন:

let view = AKTextView()
// Use a simple or fancy NSAttributedString
view.attributedText = .init(string: "Some text here")
// Add to the view hierarchy somewhere

এটাই! আপনি এখানে সম্পূর্ণ উত্স খুঁজে পেতে পারেন: https://github.com/FlickType/AccessibilityKit

আশাকরি এটা সাহায্য করবে!


1
নভেম্বর 2018: ফ্লিকটাইপ এবং অ্যাক্সেসিবিলিটি কিটটি ব্যক্তিগত হয়ে গেছে বা সরানো হয়েছে Appears
ক্রিস প্যাভগ্লিও

3

আইওএস 9-এ আমাকে সবেমাত্র করতে হয়েছিল:

  1. লেবেলের বাম এবং ডান থেকে তত্ত্বাবধানে সীমাবদ্ধতা যুক্ত করুন।
  2. লাইন বিরতি মোড আইবিতে ক্লিপিংয়ে সেট করুন।
  3. আইবিতে লাইন সংখ্যা 1 সেট করুন।

কেউ 0 টি রেখার সংখ্যা নির্ধারণের পরামর্শ দিয়েছেন, তবে আমার জন্য এটি কেবল লেবেলটিকে একাধিক লাইনে যেতে ...


এটি আমার জন্য কৌশলটি করেছে। আমি একটি স্থিতিশীল কক্ষে সবেমাত্র একটি UILabelএবং একটি নির্বাচন করেছি UITextFieldএবং "অটোলাআউট সমস্যাগুলি সমাধান করুন", এবং "মিসিং সীমাবদ্ধতাগুলি" ক্লিক করেছি। সবকিছু লাইন রেখেছে, কিন্তু অটোশ্রিংকের লেবেলের দূরত্বটি জানতে হবে, যা "মিসিং সীমাবদ্ধতাগুলি যোগ করে" এতে কোনও বাধা যুক্ত করেনি।
অ্যাড্রিয়ান

2

আমি মনে করি আপনি বরাদ্দ init লেবেলের পরে বেলো কোড লিখতে পারেন

UILabel* lbl = [[UILabel alloc]initWithFrame:CGRectMake(0, 10, 280, 50)];
lbl.text = @"vbdsbfdshfisdhfidshufidhsufhdsf dhdsfhdksbf hfsdh fksdfidsf sdfhsd fhdsf sdhfh sdifsdkf ksdhfkds fhdsf dsfkdsfkjdhsfkjdhskfjhsdk fdhsf ";
[lbl setMinimumFontSize:8.0];
[lbl setNumberOfLines:0];
[lbl setFont:[UIFont systemFontOfSize:10.0]];
lbl.lineBreakMode = UILineBreakModeWordWrap;
lbl.backgroundColor = [UIColor redColor];
[lbl sizeToFit];
[self.view addSubview:lbl];

এটি আমার সাথে কাজ করছে সূক্ষ্মভাবে এটি ব্যবহার করুন


1
ধন্যবাদ, তবে এটি হ'ল ন্যূনতম প্রয়োজনীয় ফন্টটি গণনা বা সঙ্কুচিত করবে না যেমনটি আমি বুঝতে পারি এবং আপনার ন্যূনতম ফন্টটি কেন স্বাভাবিক তবে বড়?
লুকাশ

2

দু'বছর পরে, এবং এই সমস্যাটি এখনও প্রায় ...

আইওএস 8 / এক্সকোড 6.1 এ, আমি মাঝে মাঝে সন্ধান করছিলাম যে আমার UILabel(এ-তে তৈরি হয়েছিল)UITableViewCell অটোলাউট চালু হওয়ার সাথে একটিতে তৈরি, এবং নমনীয় সীমাবদ্ধতা যাতে এতে প্রচুর জায়গা ছিল) পাঠ্যের স্ট্রিংয়ের সাথে নিজেকে ফিট করতে পারে না।

বিগত বছরগুলির মতো সমাধানটিও ছিল পাঠ্য সেট করা এবং তারপরে কল করা sizeToFit

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    . . .
    cell.lblCreatedAt.text = [note getCreatedDateAsString];
    [cell.lblCreatedAt sizeToFit];
}

(দীর্ঘশ্বাস.)


1

এটি কীভাবে করবেন তা এখানে রয়েছে S নিম্নলিখিত বার্তাটি মনে করুন লেবেলটি হ'ল লেবেলটি আপনি পছন্দসই প্রভাব ফেলতে চান ow এখন, কোডগুলির এই সাধারণ লাইনটি ব্যবহার করে দেখুন:

    //SET THE WIDTH CONSTRAINTS FOR LABEL.
    CGFloat constrainedWidth = 240.0f;//YOU CAN PUT YOUR DESIRED ONE,THE MAXIMUM WIDTH OF YOUR LABEL.
 //CALCULATE THE SPACE FOR THE TEXT SPECIFIED.
    CGSize sizeOfText=[yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
    UILabel *messageLabel=[[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)];
    messageLabel.text=yourText;
    messageLabel.numberOfLines=0;//JUST TO SUPPORT MULTILINING.

আরে আপনার উত্তরের জন্য ধন্যবাদ, তবে আমার লেবেলের উচ্চতা গণনা করার দরকার নেই, আমার নির্দিষ্ট আকার আছে এবং তার উপর নির্ভর করে প্রয়োজনে আমার ফন্টটি আরও ছোট হতে হবে।
লুকাশ

1

numberOfLines > 1 আমি কি এইভাবে একটি শর্ত তৈরি করেছি তা যদি কাজ করে না-

if(lblRecLocation.text.length > 100)
    lblRecLocation.font = [UIFont fontWithName:@"app_font_name" size:10];

0

পার্টিতে দেরি হয়ে আসছে, তবে যেহেতু আমার প্রতি লাইন প্রতি একটি শব্দ থাকার অতিরিক্ত প্রয়োজনীয়তা ছিল, এই যুক্তটি আমার পক্ষে কৌশলটি করেছে:

label.numberOfLines = [labelString componentsSeparatedByString:@" "].count;

অ্যাপল ডক্স বলে:

সাধারণত, ফন্টের বৈশিষ্ট্যটিতে আপনি যে ফন্টটি উল্লেখ করেছেন তার সাথে লেবেল পাঠ্য আঁকা হয়। তবে এই সম্পত্তিটি যদি হ্যাঁ সেট করা থাকে এবং পাঠ্য সম্পত্তির পাঠ্যটি লেবেলের সীমানা আয়তক্ষেত্রের চেয়ে বেশি হয়ে যায়, স্ট্রিং ফিট না হওয়া বা সর্বনিম্ন ফন্টের আকার না পাওয়া পর্যন্ত রিসিভার ফন্টের আকার হ্রাস করতে শুরু করে। আইওএস 6 এবং এর আগেরগুলিতে, এই সম্পত্তিটি তখনই কার্যকর হয় যখন নম্বর অফলাইন বৈশিষ্ট্য 1 তে সেট করা থাকে।

তবে এটি একটি মিথ্যা। আমি তোমাকে মিথ্যা বলছি! এটি সমস্ত আইওএস সংস্করণে সত্য। বিশেষত, এটির ক্ষেত্রে এটি ব্যবহার UILabelকরার ক্ষেত্রে সত্য UICollectionViewCellযা কাস্টম লেআউটের মাধ্যমে রানটাইমের সময় গতিশীলভাবে সামঞ্জস্য করা বাধার দ্বারা আকার নির্ধারণ করা হয় (প্রাক্তন)।self.menuCollectionViewLayout.itemSize = size ) এর ।

সুতরাং পূর্ববর্তী উত্তরে উল্লিখিত হিসাবে adjustsFontSizeToFitWidthএবং এর সাথে একত্রে ব্যবহৃত হওয়ার সাথে সাথে শব্দের গণনার উপর ভিত্তি করে minimumScaleFactorপ্রোগ্রামিকভাবে সেট numberOfLinesকরা অটোশ্রিংক সমস্যার সমাধান করে। শব্দ গণনা বা এমনকি চরিত্রের গণনার উপর ভিত্তি করে অনুরূপ কিছু করা একটি "যথেষ্ট পরিমাণে" সমাধান তৈরি করতে পারে।


0

সুইফ্ট 4-এ (প্রোগ্রামগতভাবে):

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200.0, height: 200.0))
label.adjustsFontSizeToFitWidth = true
label.numberOfLines = 0

label.text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum."

view.addSubview(label)

0

সুইফট 4, এক্সকোড 9.4.1

যে সমাধানটি আমার পক্ষে কাজ করেছে: আমার কাছে একটি সংগ্রহ ভিউ সেলের মধ্যে একটি লেবেল ছিল এবং লেবেলের পাঠ্যটি ছাঁটা হচ্ছে। স্টোরিবোর্ডে নীচের মতো বৈশিষ্ট্যগুলি সেট করুন

Lines = 0
LineBreak = Word Wrap
Set yourlabel's leading and trailing constraint = 0 (using Autolayout)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.