iOS 6の属性付き文字列APIを使用してテキストのサイズを計算し、必要に応じてフォントサイズを縮小しようとしています。しかし、ドキュメンテーションによれば、それを動作させることはできません。NSStringDrawingContextをテキストに縮小する方法は?
NSString *string = @"This is a long text that doesn't shrink as it should";
NSStringDrawingContext *context = [NSStringDrawingContext new];
context.minimumScaleFactor = 0.5;
UIFont *font = [UIFont fontWithName:@"SourceSansPro-Bold" size:32.f];
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.lineBreakMode = NSLineBreakByClipping;
NSDictionary *attributes = @{ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle };
NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self.title attributes:attributes];
CGRect rect = [attributedString boundingRectWithSize:CGSizeMake(512.f, 512.f) options:NSStringDrawingUsesLineFragmentOrigin context:context];
NSLog(@"rect: %@, context: %@", NSStringFromCGRect(rect), context.debugDescription);
ただし、テキストは縮小されずに切り捨てられます。 actualScaleFactor
は常に1
です。結果は次のとおりです。
rect:{{0, 0}, {431.64801, 80.447998}}, context:<NSStringDrawingContext: 0x14e85770> minimumScaleFactor:0.500000 minimumTrackingAdjustment:0.000000 actualScaleFactor:1.000000 actualTrackingAdjustment:0.000000 totalBounds:{{0, 0}, {431.64801, 80.447998}}
測定方法ではなく実際の描画方法を使用した場合の結果は同じです。段落スタイルを削除すると、テキストが折り返され、縮小されません。段落スタイルを削除し、1行のテキストのみを許可するサイズを選択すると、テキストは縮小される代わりに切り捨てられます。なにが問題ですか? NSStringDrawingContext
を扱うドキュメントやオンラインリソースはほとんどありません。そして、私は
私は「同じ問題を抱えていると、ちょうどすることができますそれを働かせないでください... – Pascal
私はiOS 8で同じ問題に遭遇しました。actualScaleFactorは更新されません。コンテキストはboundingRectWithSize:options:attributes :: context:またはdrawWithRect:options:attributes:context:で使用されます。 –