এই পয়েন্টটি পড়তে কেউ সাহসী (বা যথেষ্ট হতাশ) ক্ষেত্রে আমি পৃষ্ঠার নীচে সঠিক সমাধান পোস্ট করব।
এখানে তাদের জন্য গীটহাব রেপো রয়েছে, যারা এই সমস্ত পাঠটি পড়তে চান না: রিজাইজেবলটেক্সটভিউ
এটি আইওএস 7 (এবং আমি বিশ্বাস করি এটি আইওএস 8 এর সাথে কাজ করবে) এবং অটোলেআউট সহ কাজ করে। আপনার ম্যাজিক নম্বরগুলির দরকার নেই, লেআউট অক্ষম করুন এবং এ জাতীয় স্টাফ অক্ষম করুন। সংক্ষিপ্ত এবং মার্জিত সমাধান।
আমি মনে করি, সমস্ত সীমাবদ্ধতা সম্পর্কিত কোড updateConstraints
পদ্ধতিতে যাওয়া উচিত । সুতরাং, আসুন আমরা নিজের তৈরি করি ResizableTextView
।
আমাদের এখানে প্রথম যে সমস্যাটি দেখা হচ্ছে তা হ'ল viewDidLoad
পদ্ধতির আগে আসল সামগ্রীর আকার জানেন না know আমরা দীর্ঘ এবং বগি রাস্তাটি নিতে পারি এবং এটি হরফ আকার, লাইন ব্রেক ইত্যাদির উপর ভিত্তি করে গণনা করতে পারি তবে আমাদের দৃ solution় সমাধান প্রয়োজন, তাই আমরা এটি করব:
CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];
সুতরাং এখন আমরা আসল বিষয়বস্তু জানি আমরা যেখানেই থাকি না কেন: আগে বা পরে viewDidLoad
। এবার টেক্সটভিউতে উচ্চতার সীমাবদ্ধতা যুক্ত করুন (স্টোরিবোর্ড বা কোডের মাধ্যমে, যাই হোক না কেন)। আমরা আমাদের সাথে এই মানটি সমন্বয় করব contentSize.height
:
[self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
if (constraint.firstAttribute == NSLayoutAttributeHeight) {
constraint.constant = contentSize.height;
*stop = YES;
}
}];
শেষ কাজটি হ'ল সুপারক্লাসকে বলা updateConstraints
।
[super updateConstraints];
এখন আমাদের ক্লাসটি দেখে মনে হচ্ছে:
ResizableTextView.m
- (void) updateConstraints {
CGSize contentSize = [self sizeThatFits:CGSizeMake(self.frame.size.width, FLT_MAX)];
[self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *constraint, NSUInteger idx, BOOL *stop) {
if (constraint.firstAttribute == NSLayoutAttributeHeight) {
constraint.constant = contentSize.height;
*stop = YES;
}
}];
[super updateConstraints];
}
সুন্দর এবং পরিষ্কার, তাই না? এবং আপনার নিয়ন্ত্রকগুলিতে আপনাকে সেই কোডটি মোকাবেলা করতে হবে না !
কিন্তু অপেক্ষা করো!
Y না কোন অ্যানিমেশন!
আপনি সহজেই textView
প্রসারিত করতে পরিবর্তনগুলি প্রাণবন্ত করতে পারেন । এখানে একটি উদাহরণ:
[self.view layoutIfNeeded];
// do your own text change here.
self.infoTextView.text = [NSString stringWithFormat:@"%@, %@", self.infoTextView.text, self.infoTextView.text];
[self.infoTextView setNeedsUpdateConstraints];
[self.infoTextView updateConstraintsIfNeeded];
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionLayoutSubviews animations:^{
[self.view layoutIfNeeded];
} completion:nil];