1. ホーム
  2. iphone

UILabelのテキストのピクセル幅

2023-09-05 07:24:08

質問

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はラベル全体と同じ長さの線を描きますが、テキストはもっと短くすることができます。 線が適切に引けるように、テキストの長さをピクセル単位で決定する方法はありますか?

また、もし知っていれば、他の解決策にも興味があります :)

最高です。 エリック

どのように解決するのですか?

NSStringには sizeWithAttributesを使用しています。 メソッドがあり、これを使用することができます。これはCGSize構造体を返すので、以下のようなことをして、ラベルの中のテキストの幅を求めることができます。

iOS 7以降

CGSize textSize = [[label text] sizeWithAttributes:@{NSFontAttributeName:[label font]}];

CGFloat strikeWidth = textSize.width;

iOS <7

iOS7以前は、iOS7に対応するために sizeWithFont を使用していました。 メソッドを使用していました。

CGSize textSize = [[label text] sizeWithFont:[label font]];

CGFloat strikeWidth = textSize.width;

UILabelにはfontプロパティがあり、これを利用することで上記のようにラベルのフォントの詳細を動的に取得することができます。

これが役に立つといいのですが :)