3

我正在尝试水平对齐具有不同大小和字体的文本位。

这是我想要的结果(用 scribus 制作):

小样

您可以看到文本完全水平对齐(到像素)。

我尝试使用基本的 UITextView 来实现这一点,并证明文本的合理性。这是我得到的:

正当的

您可以看到文本未与像素水平对齐。我试过居中,但仍然不够好:

居中

如果事情还不够难,第一行和第三行是动态文本……所以它们的大小会发生变化。

我看了一下textkit,但没有发现任何结论......

我的线索是:

  1. 在给定宽度的情况下找到文本的最佳字体大小。
  2. 空间字形均匀,使文本边界框等于所需的宽度。

但我不知道该怎么做。有什么线索吗?谢谢 !

4

1 回答 1

0

你试过 NSString 的boundingRectWithSize:options:attributes:context:吗?

CGRect rect = [string boundingRectWithSize:CGSizeMake(width, height) 
                                   options:NSStringDrawingUsesFontLeading 
                                attributes:attributes
                                   context:nil];

如果您还支持 iOS 6,请使用-[NSString sizeWithFont:constrainedToSize:lineBreakMode:]

CGSize textSize = [string sizeWithFont:uifont
                     constrainedToSize:maximumCGSize
                         lineBreakMode:lineBreakMode];

自 iOS 7 起,该sizeWithFont:constrainedToSize:lineBreakMode:方法已被弃用。

使用其中一种方法,您可以找到最宽的线并将其他线与之匹配。在您使用动态文本的情况下,我建议您不要使用 UITextView 来确保文本正确对齐。

于 2013-10-30T01:59:35.307 回答