NSString sizeWithFont:返回不一致的结果?已知的bug?

时间:2010-05-31 17:56:11

标签: iphone layout uiview nsstring sizewithfont

我正在尝试创建一个简单的自定义UIView,其中包含使用单个字体绘制的字符串,但第一个字符稍大一些。

我认为这很容易用两个UILabel:s放在彼此旁边。

我使用NSString sizeWithFont来测量我的字符串,以便能够正确布局。

但是我注意到返回的矩形中的字体基线因+/- 1像素而异,具体取决于我设置的字体大小。 这是我的代码:

NSString* ctxt = [text substringToIndex:1];
NSString* ttxt = [text substringFromIndex:1];

CGSize sz = [ctxt sizeWithFont: cfont ];
clbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, sz.width, sz.height)];
clbl.text = ctxt;
clbl.font = cfont;
clbl.backgroundColor = [UIColor clearColor];
[contentView addSubview:clbl];

CGSize sz2 = [ttxt sizeWithFont: tfont];
tlbl = [[UILabel alloc] initWithFrame:CGRectMake(sz.width, (sz.height - sz2.height), sz2.width, sz2.height)];
tlbl.text = ttxt;
tlbl.font = tfont;
tlbl.backgroundColor = [UIColor clearColor];
[contentView addSubview:tlbl];

如果我使用12.0和14.0作为尺寸,它可以正常工作。 但是如果我改为使用13.0和15.0,那么第一个字符就是1个像素太高了。

这是一个已知问题吗?

有任何建议如何解决它?

使用CSS和HTML页面创建UIWebView似乎有点过头了。以及处理动态字符串的更多工作。这是我期望做的吗?

1 个答案:

答案 0 :(得分:1)

找到答案......

当然,我还必须检查字体上的下降值,并在布局中进行补偿。

第二个标签的新rect是: CGRectMake(sz.width,(sz.height - sz2.height)+ floor(cfont.descender - tfont.descender),sz2.width,sz2.height)

floor()是为了确保它捕捉到像素位置,或者字体看起来模糊