在IOS中绘制字符串时,默认情况下,文本左上角有一个基线。当使用具有相同y坐标的不同字体大小的多个字符串时,这可能会导致问题。
问题;
如何基线 <第一行的左下角。
我如何做到这一点?
BR,
添
答案 0 :(得分:2)
我终于找到了解决问题的方法 通过从rect.origin.y中减去 UIFont ascender 属性,我可以将文本基线设置到左下角。
引用ascender属性的UIFont文档:
“接收器最长的上升器的顶部y坐标,偏离基线。” https://developer.apple.com/library/ios/documentation/uikit/reference/UIFont_Class/Reference/Reference.html#//apple_ref/occ/instp/UIFont/ascender
- (void)drawTextBaseLined:(NSString *)text
rect:(CGRect)rect
font:(UIFont *)font
{
if ([text length] == 0) return false;
NSDictionary *attributes = @{NSFontAttributeName : font};
rect.origin.y -= font.ascender;
[text drawWithRect:rect
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
}
此方法适用于一行或多行文本以及不同的字体大小。 我希望我的解决方案能帮助其他人。
BR,
添
答案 1 :(得分:0)
使用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context;
当您拥有标签的高度时,只需进行数学计算以选择正确的原点,使左下角始终位于同一位置。
NSDictionary * attributes = @{NSFontAttributeName:[UIFont systemFont]};
CGRect rect = [[NSString string] boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];
如果您希望左下角的标签始终为50pix,则标签的原点将为(50 - rect.size.height)。
更改大小以适应您的约束。