2
さまざまなフォントサイズの文字列の配列をUIViewに描画する場合は、thisとします。各文字列を描画するために必要な高さを計算しています。この例の文字列の配列は、{"いくつかのテキストを入力"、 "それ"、 "適合する"、 "rect"}です。 NSStringsの配列をUIViewとして描画するには、それらの間に先行するスペースはなく、rect全体を占有しますか?
- (void)drawStringArray:(NSArray *)splittedStringArray maxYoFString:(CGFloat)maxY rect:(CGRect)rect fontsDict:(NSMutableDictionary *)fontsDict {
//Alter X origin if scaled
CGFloat originX = rect.origin.x;
CGRect drawRect = rect;
drawRect.origin.x = originX;
drawRect.origin.y = 0.0;
CGFloat heightForString = 0.0;
for (int i = 0; i < splittedStringArray.count; i++) {
NSString *string = splittedStringArray[i];
UIFont *font = [fontsDict objectForKey:string];
if(i < splittedStringArray.count -1)
heightForString = [string heightForFont:font];
[string drawInRect:rect withAttributes:@{
NSFontAttributeName : font,
NSForegroundColorAttributeName :self.random.currentTextColor
}];
drawRect.origin.y += heightForString;
}
}
しかし、2行の間に追加されるスペースが常にある:私はその後、私は次のようにUIViewの中で文字列を描画しようと
@implementation NSString (Additions)
- (CGFloat)heightForFont:(UIFont *)font {
NSAttributedString *attrString = [[NSAttributedString alloc]initWithString:self attributes:@{NSFontAttributeName:font}];
CTLineRef line = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)attrString);
CGFloat ascent, descent, leading;
CGFloat width = CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
CGFloat height = ascent + descent + leading;
return height;
}
、以下のように高さを計算します。私は先頭のスペースなしで文字列を描画したい。 current image, expected image