@ নিক এইচ 247 এর উত্তরের প্রসারিত করতে গিয়ে আমি এমন একটি সমস্যা অনুভব করেছি যেখানে প্রথমদিকে আন্ডারলাইনটি পুনরায় আঁকানো হয়নি যখন বোতামটি ঘোরানোর সময় পুনরায় আকার দেওয়া হয়েছিল; আপনার বোতামটি আবার পুনরায় আঁকতে সেট করে এটি সমাধান করা যেতে পারে:
myButton.contentMode = UIViewContentModeRedraw;
যখন সীমা পরিবর্তন হয় তখন বোতামটি পুনরায় আঁকতে বাধ্য করে।
দ্বিতীয়ত, আসল কোডটি ধরে নেওয়া হয়েছিল যে আপনার বোতামটিতে কেবলমাত্র 1 লাইন পাঠ রয়েছে (আমার বোতামটি ঘোরানোর সময় 2 লাইনে আবৃত হয়) এবং আন্ডারলাইনটি কেবলমাত্র পাঠ্যের শেষ লাইনে প্রদর্শিত হবে। ড্রয়ারেক্ট কোডটি প্রথমে বোতামের লাইনগুলির সংখ্যা গণনা করার জন্য পরিবর্তন করা যেতে পারে, তারপরে প্রতিটি লাইনে একটি নীচের দিকে রাখুন, ঠিক তেমনভাবে:
- (void) drawRect:(CGRect)rect {
CGRect textRect = self.titleLabel.frame;
// need to put the line at top of descenders (negative value)
CGFloat descender = self.titleLabel.font.descender;
CGContextRef contextRef = UIGraphicsGetCurrentContext();
// set to same colour as text
CGContextSetStrokeColorWithColor(contextRef, self.titleLabel.textColor.CGColor);
CGSize labelSize = [self.titleLabel.text sizeWithFont:self.titleLabel.font
constrainedToSize:self.titleLabel.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGSize labelSizeNoWrap = [self.titleLabel.text sizeWithFont:self.titleLabel.font forWidth:self.titleLabel.frame.size.width lineBreakMode:UILineBreakModeMiddleTruncation ];
int numberOfLines = abs(labelSize.height/labelSizeNoWrap.height);
for(int i = 1; i<=numberOfLines;i++) {
// Original code
// CGContextMoveToPoint(contextRef, textRect.origin.x, textRect.origin.y + textRect.size.height + descender + PADDING);
//
// CGContextAddLineToPoint(contextRef, textRect.origin.x + textRect.size.width, textRect.origin.y + textRect.size.height + descender);
CGContextMoveToPoint(contextRef, textRect.origin.x, textRect.origin.y + (labelSizeNoWrap.height*i) + descender + PADDING);
CGContextAddLineToPoint(contextRef, textRect.origin.x + textRect.size.width, textRect.origin.y + (labelSizeNoWrap.height*i) + descender);
CGContextClosePath(contextRef);
CGContextDrawPath(contextRef, kCGPathStroke);
}
}
আশা করি এই কোডটি অন্য কাউকে সাহায্য করবে!