gpt4 book ai didi

ios - 如何在 UIView 上绘制一个 NSStrings 数组,它们之间没有任何前导空间并占据整个矩形?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:07 24 4
gpt4 key购买 nike

我想在 UIView 上绘制一个不同字体大小的字符串数组 this .我已经计算了每根要画的字符串需要的高度。示例中的字符串数组是 {"Enter some text", "that", "will fit", "the rect"}。我计算的高度如下,

    @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

最佳答案

一个简单的解决方案是修补字体文件本身并明确修复其行高。在此处查看操作方法。

http://mbauman.net/geek/2009/03/15/minor-truetype-font-editing-on-a-mac/

关于ios - 如何在 UIView 上绘制一个 NSStrings 数组,它们之间没有任何前导空间并占据整个矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com