Iphone NSString sizeWithFont:返回不一致的结果?已知的臭虫?

Iphone NSString sizeWithFont:返回不一致的结果?已知的臭虫?,iphone,layout,uiview,nsstring,sizewithfont,Iphone,Layout,Uiview,Nsstring,Sizewithfont,我试图创建一个简单的自定义UIView,其中包含一个用单一字体绘制的字符串,但第一个字符稍大一些 我认为这可以通过两个相邻的UILabel:s轻松实现 我使用NSString sizeWithFont来测量我的字符串,以便能够正确地布局它 但我注意到返回矩形中的字体基线随我设置的字体大小的不同而变化+/-1像素。 这是我的密码: NSString* ctxt = [text substringToIndex:1]; NSString* ttxt = [text substringFromInde

我试图创建一个简单的自定义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,那么第一个字符的像素太高了

这是一个已知的问题吗

对如何解决这个问题有什么建议吗

创建一个带有CSS和HTML页面的UIWebView似乎有点过头了。还有更多处理动态字符串的工作。这就是我应该做的吗?

找到了答案

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

第二个标签的新矩形为: CGRectMake(sz.width,(sz.height-sz2.height)+地板(cfont.Downer-tfont.Downer),sz2.width,sz2.height)

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

找到答案

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

第二个标签的新矩形为: CGRectMake(sz.width,(sz.height-sz2.height)+地板(cfont.Downer-tfont.Downer),sz2.width,sz2.height)


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

我还尝试将其实现为drawRect:使用[NSString drawInRect:]确保问题不在UILabel内。同样的问题。我还尝试将其实现为drawRect:使用[NSString drawInRect:]确保问题不在UILabel中。同样的问题。如果你找到了答案,请分享。我想我找到了。为了更清楚,我将第二个标签的rect改为:CGRectMake(sz.width,(sz.height-sz2.height)+floor(cfont.drenger-tfont.drenger),sz2.width,sz2.height)如果你找到答案,请分享。我想我找到了。为了更清楚,我将第二个标签的rect改为:CGRectMake(sz.width,(sz.height-sz2.height)+floor(cfont.drenger-tfont.drenger),sz2.width,sz2.height)