@Nick H247'nin cevabına genişlerken, düğme dönme sırasında yeniden boyutlandırıldığında öncelikle alt çizginin yeniden çizilmediği bir sorunla karşılaştım; bu, düğmenizi şu şekilde yeniden çizecek şekilde ayarlayarak çözülebilir:
myButton.contentMode = UIViewContentModeRedraw;
Bu, sınırlar değiştiğinde düğmeyi yeniden çizmeye zorlar.
İkincisi, orijinal kod düğmede sadece 1 satır metin olduğunu varsaydı (düğmem rotasyonda 2 satıra sarar) ve alt çizgi yalnızca metnin son satırında görünür. DrawRect kodu önce düğmedeki satır sayısını hesaplamak için değiştirilebilir, ardından aşağıdaki gibi yalnızca alttan ziyade her satıra bir alt çizgi koyabilirsiniz:
- (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);
}
}
Umarım bu kod başka birine yardımcı olur!