Mở rộng câu trả lời của @Nick H247, tôi gặp phải một vấn đề trong đó trước tiên, phần gạch chân không được vẽ lại khi nút thay đổi kích thước khi xoay; điều này có thể được giải quyết bằng cách đặt nút của bạn để vẽ lại như vậy:
myButton.contentMode = UIViewContentModeRedraw;
Điều này buộc nút phải vẽ lại khi giới hạn thay đổi.
Thứ hai, mã ban đầu giả sử bạn chỉ có 1 dòng văn bản trong nút (nút của tôi bao bọc thành 2 dòng khi xoay) và phần gạch chân chỉ xuất hiện trên dòng văn bản cuối cùng. Mã drawRect có thể được sửa đổi để đầu tiên tính toán số lượng dòng trong nút, sau đó đặt một gạch chân trên mỗi dòng thay vì chỉ dưới cùng, như vậy:
- (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);
}
}
Hy vọng mã này sẽ giúp người khác!