Ios 如何在as UIView上绘制NSStrings数组,它们之间没有任何前导空格,并占用整个rect?
我想在UIView上绘制一个不同字体大小的字符串数组。我已经计算了绘制每个字符串所需的高度。示例中的字符串数组是{“输入一些文本”、“that”、“will fit”、“rect”}。我计算高度如下:Ios 如何在as UIView上绘制NSStrings数组,它们之间没有任何前导空格,并占用整个rect?,ios,objective-c,nsstring,drawing,Ios,Objective C,Nsstring,Drawing,我想在UIView上绘制一个不同字体大小的字符串数组。我已经计算了绘制每个字符串所需的高度。示例中的字符串数组是{“输入一些文本”、“that”、“will fit”、“rect”}。我计算高度如下: @implementation NSString (Additions) - (CGFloat)heightForFont:(UIFont *)font { NSAttributedString *attrString = [[NSAttributedString al
@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;
}
}
-(void)drawStringArray:(NSArray*)拆分StringArray maxYoFString:(CGFloat)maxY rect:(CGRect)rect fontsDict:(NSMutableDictionary*)fontsDict{
//如果缩放,则改变X原点
CGFloat originX=rect.origin.x;
CGRect drawRect=rect;
drawRect.origin.x=originX;
drawRect.origin.y=0.0;
CGFloat heightForString=0.0;
对于(int i=0;i
但在两行之间总有一个空格。我想在没有任何前导空格的情况下绘制字符串。一个简单的解决方案是修补字体文件本身并确定其行高。看看怎么做,这里