2016-04-18 2 views
2

Я хочу нарисовать массив строк разного размера шрифта на UIView как this. Я вычислил высоту, необходимую для каждой строки. Массив строки в примере: {«Введите текст», «тот», «будет соответствовать», «прямой»}. Я рассчитать высоту, как показано ниже,Как нарисовать массив NSStrings как 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; 
    } 

Тогда я пытаюсь нарисовать строку в UIView следующим образом:

- (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; 
    } 
    } 

Но всегда есть пространство, которое добавляется между двумя линиями. Я хочу нарисовать строку без какого-либо ведущего пространства. current image, expected image

ответ