Ширина в пикселях текста в UILabel ни
Мне нужно нарисовать UILabel вычеркнут. Поэтому я подкласс UILabel и реализовал его следующим образом:
@implementation UIStrikedLabel
- (void)drawTextInRect:(CGRect)rect{
[super drawTextInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context,CGRectMake(0,rect.size.height/2,rect.size.width,1));
}
@end
что происходит, так это то, что UILabel зачеркивается строкой длиной до всей метки, но текст может быть короче.
Есть ли способ определить длину текста в пикселях, чтобы линия могла быть соответствующим образом нарисована?
Я также открыт для любых других решений, если они известны:)
лучшие,
Эрик
3 ответов:
NSString имеет sizeWithAttributes: метод, который может быть использован для этого. Он возвращает структуру CGSize, поэтому вы можете сделать что-то похожее на следующее, чтобы найти ширину текста внутри вашей метки.
iOS 7 и выше
CGSize textSize = [[label text] sizeWithAttributes:@{NSFontAttributeName:[label font]}]; CGFloat strikeWidth = textSize.width;iOS
до iOS7, вы должны использовать sizeWithFont: метод.
CGSize textSize = [[label text] sizeWithFont:[label font]]; CGFloat strikeWidth = textSize.width;UILabel имеет свойство шрифта, которое можно использовать для динамического получения сведений о шрифте для ваш лейбл, как я делаю выше.
надеюсь, что это помогает :)
лучшее решение, здесь, в Свифт:
обновление:
ИбоSwift 3/4:@IBOutlet weak var testLabel: UILabel! // in any function testLabel.text = "New Label Text" let width = testLabel.intrinsicContentSize.width let height = testLabel.intrinsicContentSize.height print("width:\(width), height: \(height)")Ответ:
yourLabel?.text = "Test label text" // sample label text let labelTextWidth = yourLabel?.intrinsicContentSize().width let labelTextHeight = yourLabel?.intrinsicContentSize().height
надеюсь, что этот пример может помочь вам (iOS > 7)
NSString *text = @" // Do any additional setup after loading the view, typically from a nib."; CGRect rect = CGRectZero; NSDictionary *attrDict = @{NSFontAttributeName : [UIFont systemFontOfSize:17]}; rect = [text boundingRectWithSize:CGSizeMake(100,9999) options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:attrDict context:Nil]; UILabel *lbl = [[UILabel alloc] init]; lbl.text = text; rect.origin = CGPointMake(50, 200); lbl.frame = rect; lbl.lineBreakMode = NSLineBreakByWordWrapping; lbl.numberOfLines = 0; [self.view addSubview:lbl];
Comments