在 IOS 中绘制字符串时,默认情况下,文本以左上角为基线。当使用具有相同 y 坐标的不同字体大小的多个字符串时,这可能会导致问题。
问题;
如何在第一行的左下角设置字符串的基线。
我如何实现这一目标?
兄弟,
蒂姆
在 IOS 中绘制字符串时,默认情况下,文本以左上角为基线。当使用具有相同 y 坐标的不同字体大小的多个字符串时,这可能会导致问题。
问题;
如何在第一行的左下角设置字符串的基线。
我如何实现这一目标?
兄弟,
蒂姆
我终于找到了解决我的问题的方法。
通过从 rect.origin.y 中减去UIFont Assender属性,我可以将文本设置为左下角的基线。
引用 assender 属性的 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];
}
此方法适用于一行或多行文本以及不同的字体大小。我希望我的解决方案也对其他人有所帮助。
兄弟,
蒂姆
利用- (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)。
更改大小以适应您的约束。