Ширина в пикселях текста в 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 зачеркивается строкой длиной до всей метки, но текст может быть короче.
Есть ли способ определить длину текста в пикселях, чтобы линия могла быть соответствующим образом нарисована?



Я также открыт для любых других решений, если они известны:)



лучшие,
Эрик

599   3  

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

    Ничего не найдено.