আমি আমার চিন্তা যুক্ত করতে চাই যেহেতু আমার ঠিক একই সমস্যা ছিল had
আমি ব্যবহার করছিলাম UITextView
যেহেতু এটিতে ভাল টেক্সট প্রান্তিককরণ ছিল (ন্যায্যতা, যা সেই সময়ে পাওয়া যায়নি UILabel
) তবে অ-ইন্টারেক্টিভ-অ-স্ক্রোলযোগ্য "অনুকরণ" করার জন্য UILabel
, আমি সম্পূর্ণ স্ক্রোলিং, বাউন্সিং এবং ব্যবহারকারীর মিথস্ক্রিয়া বন্ধ করেছিলাম ।
অবশ্যই সমস্যাটি ছিল পাঠ্যটি গতিশীল ছিল এবং প্রস্থটি স্থির করা হওয়ার সাথে সাথে আমি যখনই নতুন পাঠ্য মানটি সেট করেছিলাম তখনই উচ্চতাটি পুনরায় গণনা করা উচিত।
boundingRectWithSize
আমার পক্ষে মোটেও ভাল কাজ হয়নি, যা আমি দেখতে পাচ্ছিলাম UITextView
তার উপর থেকে কিছুটা মার্জিন যুক্ত করা যা boundingRectWithSize
কোনও গণনাতে নামবে না, সুতরাং, থেকে উদ্ধার করা উচ্চতা boundingRectWithSize
তার চেয়ে কম ছিল।
যেহেতু পাঠ্যটি দ্রুত আপডেট করা যাচ্ছিল না, এটি কেবলমাত্র কিছু তথ্যের জন্য ব্যবহৃত হয়েছে যা প্রতি ২-৩ সেকেন্ডে সর্বাধিক আপডেট হতে পারে, আমি নিম্নলিখিত পদ্ধতির সিদ্ধান্ত নিয়েছি:
/* This f is nested in a custom UIView-inherited class that is built using xib file */
-(void) setTextAndAutoSize:(NSString*)text inTextView:(UITextView*)tv
{
CGFloat msgWidth = tv.frame.size.width; // get target's width
// Make "test" UITextView to calculate correct size
UITextView *temp = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, msgWidth, 300)]; // we set some height, really doesn't matter, just put some value like this one.
// Set all font and text related parameters to be exact as the ones in targeted text view
[temp setFont:tv.font];
[temp setTextAlignment:tv.textAlignment];
[temp setTextColor:tv.textColor];
[temp setText:text];
// Ask for size that fits :P
CGSize tv_size = [temp sizeThatFits:CGSizeMake(msgWidth, 300)];
// kill this "test" UITextView, it's purpose is over
[temp release];
temp = nil;
// apply calculated size. if calcualted width differs, I choose to ignore it anyway and use only height because I want to have width absolutely fixed to designed value
tv.frame = CGRectMake(tv.frame.origin.x, tv.frame.origin.y, msgWidth, tv_size.height );
}
* উপরের কোডটি সরাসরি আমার উত্স থেকে অনুলিপি করা হয়নি, আমাকে এটিকে সামঞ্জস্য করতে হয়েছিল / এই নিবন্ধটির জন্য প্রয়োজনীয় অন্যান্য সামগ্রীর গুচ্ছ থেকে সাফ করতে হবে। এটি কপি-পেস্ট এবং এটি-উইল-ওয়ার্ক-কোডের জন্য নেবেন না।
স্পষ্টত অসুবিধা হ'ল এটি প্রতিটি কলের জন্য বরাদ্দ এবং প্রকাশ করেছে।
তবে, সুবিধাটি হ'ল আপনি কীভাবে বাউন্ডরিং রেক্টউইথসাইজ পাঠ্যটি আঁকেন এবং এর আকার এবং টেক্সট অঙ্কনটির প্রয়োগকরণ UITextView
(বা UILabel
যা আপনি কেবল এটির UITextView
সাথে প্রতিস্থাপন ব্যবহার করতে পারেন UILabel
) গণনা করে তার মধ্যে সামঞ্জস্যতার উপর নির্ভর করে এড়িয়ে যান । অ্যাপলের যে কোনও "বাগ" এড়ানো যেতে পারে।
পিএস মনে হচ্ছে আপনার এই "টেম্প" প্রয়োজন হবে না UITextView
এবং কেবল sizeThatFits
লক্ষ্য থেকে সরাসরি জিজ্ঞাসা করতে পারেন , তবে এটি আমার পক্ষে কার্যকর হয়নি। যদিও যুক্তি বলবে এটি কাজ করা উচিত এবং অস্থায়ী বরাদ্দ / প্রকাশের UITextView
প্রয়োজন হয় না, এটি হয়নি। তবে এই সমাধানটি আমি যে কোনও পাঠ্যকে সেট করব তার জন্য নির্দোষভাবে কাজ করেছে।
lineBreakMode
?