2016-04-18 3 views
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

答えて

関連する問題