【发布时间】:2016-05-05 11:35:41
【问题描述】:
我注意到,在某些字体中,如果某些符号的帧大小由 NSAttributedString.size 或 boundingRectWithSize 确定,则它们在 UILabel 中显示不正确。例如,我选择字体 AvenirNext-Bold,符号“A”,并将 pointSize 设置为 300。计算帧(宽度 = 218.69999999999999,高度 = 409.80000000000001)。我把那个字符放在上述大小的框架中。
正如你在图片中看到的,被显示的标签被切断的部分在红色框中突出显示。我检查了其他几种字体,并注意到它一直在发生。我可以摆脱这个而不必更改 UILabel 的框架并更正字体中符号的边距吗?使用第三方程序,我发现对于AvenirNext-Bold字体,对于字符“A”,左右边距等于-1.39。
有人知道解决这个问题的任何技术吗?
补充:
如果您在 MAC 操作系统上打开字体应用程序,并找到 Avenir Next Bold 字体,您会看到此字体被截断。
代码:
NSString *text = @"A";
NSString *fontName = @"AvenirNext-Bold";
CGFloat pointSize = 300.f;
UIFont *font = [UIFont fontWithName:fontName size:pointSize];
CGSize size = [text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil].size;
self.label.text = text;
self.label.font = font;
self.label.frame = CGRectMake((self.view.bounds.size.width - size.width) / 2.f, (self.view.bounds.size.height - size.height) / 2.f, size.width, size.height);
附加字体: 您可以将字体更改为 BodoniSvtyTwoITCTT-BookIta。
【问题讨论】:
-
你试过'label.clipToBounds = false'
-
大卫威廉姆斯,是的,我试过了。
-
请显示重现所需的实际代码。
-
matt,这里是重现的代码。