Objective-C - 左下角的文本基线

时间:2014-09-10 14:10:20

标签: ios objective-c string position baseline

在IOS中绘制字符串时,默认情况下,文本左上角有一个基线。当使用具有相同y坐标的不同字体大小的多个字符串时,这可能会导致问题。

问题;
如何基线 <第一行的左下角

enter image description here

我如何做到这一点?

BR,

2 个答案:

答案 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)。

更改大小以适应您的约束。