সূত্র: http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html
মাল্টি-লাইন পাঠ্যের অন্তর্নিহিত সামগ্রীর আকার
ইউআইএলবেল এবং এনএসটিেক্সটফিল্ডের অভ্যন্তরীণ সামগ্রীর আকার বহু-লাইন পাঠ্যের জন্য অস্পষ্ট। পাঠ্যের উচ্চতা লাইনগুলির প্রস্থের উপর নির্ভর করে, যা সীমাবদ্ধতাগুলি সমাধান করার সময় নির্ধারণ করা হয়নি। এই সমস্যাটি সমাধান করার জন্য, উভয় শ্রেণীর পছন্দের ম্যাক্সলয়আউটউইথ নামের একটি নতুন সম্পত্তি রয়েছে যা অন্তর্নিহিত সামগ্রীর আকার গণনা করার জন্য সর্বাধিক লাইনের প্রস্থ নির্দিষ্ট করে।
যেহেতু আমরা সাধারণত এই মানটি আগে থেকে জানি না, তাই এই অধিকার পেতে আমাদের একটি দ্বি-পদক্ষেপ গ্রহণ করা দরকার। প্রথমে আমরা অটো লেআউটটিকে তার কাজটি করতে দিয়েছি এবং তারপরে আমরা পছন্দসই সর্বাধিক প্রস্থ এবং ট্রিগার লেআউটটিকে আবার আপডেট করতে লেআউট পাসে ফলাফলযুক্ত ফ্রেমটি ব্যবহার করি।
- (void)layoutSubviews
{
[super layoutSubviews];
myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
[super layoutSubviews];
}
[সুপার লেআউটসুভিউ] প্রথম কলটি লেবেলের ফ্রেম সেট পেতে প্রয়োজনীয়, যখন দ্বিতীয় কলটি পরিবর্তনের পরে লেআউটটি আপডেট করার জন্য প্রয়োজনীয়। আমরা যদি দ্বিতীয় কলটি বাদ দিই তবে আমরা একটি এনএসআইটার্নাল ইনকনসিসিটিসিএক্সেপশন ত্রুটি পেয়েছি, কারণ আমরা সীমাবদ্ধতাগুলি আপডেট করার জন্য লেআউট পাসে পরিবর্তন করেছি, তবে আমরা আবার লেআউটটি ট্রিগার করি নি।
আমরা নিজেও একটি লেবেল সাবক্লাসে এটি করতে পারি:
@implementation MyLabel
- (void)layoutSubviews
{
self.preferredMaxLayoutWidth = self.frame.size.width;
[super layoutSubviews];
}
@end
এই ক্ষেত্রে, আমাদের প্রথমে [সুপার লেআউটসুভিউগুলি] কল করার দরকার নেই, কারণ যখন লেআউটসুভিউগুলি বলা হয়, তখন ইতিমধ্যে আমাদের নিজের লেবেলে একটি ফ্রেম থাকে।
ভিউ কন্ট্রোলার স্তর থেকে এই সমন্বয় করতে, আমরা ভিউডিডলআউটসুবউভিউগুলিতে .ুকি। এই মুহুর্তে প্রথম অটো লেআউট পাসের ফ্রেমগুলি ইতিমধ্যে সেট করা আছে এবং আমরা সেগুলি পছন্দের সর্বাধিক প্রস্থ সেট করতে ব্যবহার করতে পারি।
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
myLabel.preferredMaxLayoutWidth = myLabel.frame.size.width;
[self.view layoutIfNeeded];
}
শেষ অবধি, নিশ্চিত হয়ে নিন যে আপনার লেবেলের স্পষ্ট উচ্চতার প্রতিবন্ধকতা নেই যা লেবেলের সামগ্রী সংকোচন প্রতিরোধের অগ্রাধিকারের চেয়ে উচ্চতর অগ্রাধিকার রয়েছে। অন্যথায় এটি সামগ্রীর গণনা করা উচ্চতাটিকে ট্রাম্প করবে। লেবেলের উচ্চতাকে প্রভাবিত করতে পারে এমন সমস্ত প্রতিবন্ধকতাগুলি পরীক্ষা করে দেখুন।