0

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

问题;
如何在第一行的左下角设置字符串的基线

在此处输入图像描述

我如何实现这一目标?

兄弟,
蒂姆

4

2 回答 2

2

我终于找到了解决我的问题的方法。
通过从 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];
}

此方法适用于一行或多行文本以及不同的字体大小。我希望我的解决方案也对其他人有所帮助。

兄弟,
蒂姆

于 2014-09-12T23:19:04.527 回答
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)。

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

于 2014-09-10T14:28:13.083 回答