Ios 字体在UILabel中不合适-上行或下行被裁剪

Ios 字体在UILabel中不合适-上行或下行被裁剪,ios,fonts,Ios,Fonts,我已经做了大量的搜索/阅读/测试,无法找到解决此问题的方法。 我从iOS 4.3开始就尝试过了,但在iOS 7中仍然没有解决 问题在于:大尺寸字体的升序或降序可以在UILabel中裁剪。 下面是一个直接来自Xcode 5.1 UI的屏幕截图(根本没有代码!)显示了问题-字体大小300点: 正如您所看到的,即使是像Helvetica Neue(粗体或非粗体)这样的简单字体,其下半部分也会被裁剪。(您将看到UIViewController>UIView>UILabel) 如果您尝试此操作,然后更改

我已经做了大量的搜索/阅读/测试,无法找到解决此问题的方法。 我从iOS 4.3开始就尝试过了,但在iOS 7中仍然没有解决

问题在于:大尺寸字体的升序或降序可以在UILabel中裁剪。 下面是一个直接来自Xcode 5.1 UI的屏幕截图(根本没有代码!)显示了问题-字体大小300点:

正如您所看到的,即使是像Helvetica Neue(粗体或非粗体)这样的简单字体,其下半部分也会被裁剪。(您将看到UIViewController>UIView>UILabel)

如果您尝试此操作,然后更改点大小,您将看到字体比例减小,最终将不会裁剪向下的字体。这里是160点:

还请注意,有些字体不会被裁剪,而有些字体会被裁剪——试试引人注目的字体、纸莎草字体或Savoye LET字体——所有这些字体都是标准的iOS和字体

我这里说的是高度-我知道我可以使用adjustsFontSizeToFitWidth=是查看整个长度,我也知道我可以使用sizeToFit,但是这两种方法都不能保证不裁剪上升/下降器

还请注意,使用升序/降序值计算高度没有帮助,因为主要问题是绘制标签时字体未垂直居中。(如果是的话,这将是一个简单的计算。)

因此,问题是:如何显示尽可能高的字体,并确保无论使用何种字体,升序/降序都不会被裁剪

编辑: 我重新阅读了我的问题,意识到我问得不恰当——我能够调整标签大小以适应字体——这不是问题所在。下面是修改后的问题:

如何在UILabel中绘制尽可能大的文本,并确保文本垂直居中,而不裁剪升序或降序

我可以很容易地计算出文本的整体高度,一旦我知道它适合,如何在UILabel中垂直居中绘制它


例如:在第一个屏幕截图中,文本“Tg”被裁剪,但它很容易短到足以垂直放入标签中。事实上,如果它正确居中,它可能会更大,并且仍然合适。但是我知道没有办法垂直居中…

标签的大小可以根据字符串的长度、使用的font属性和字体的大小来确定。我经常使用这种方法,对于这些要求非常有效-

NSString *textWithinLabel = @"Whatever you like, passed from where ever";

CGSize maximumLabelSize = CGSizeMake(300, 1000); //Place your maximum sizes here

//Here I've used Helvetica, though you can pass any font name or font size here to try out
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[[UIFont fontWithName:@"Helvetica" size:15] forKey: NSFontAttributeName];

CGSize newExpectedLabelSize = [textWithinLabel boundingRectWithSize:maximumLabelSize options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributes context:nil].size;

 CGRect frame = self.yourLabel.frame;
frame.size.height = newExpectedLabelSize.height;
self.yourLabel.frame = frame;
此示例将更改标签的高度,但您也可以使用它更改宽度等。 此处的stringAttributes用于计算大小,而不是设置属性。例如,如果您的标签使用14分,而您计算了30分的高度,它不会改变字体的高度,它只会增加标签的大小以适应更大的字体大小。如果希望此方法也更改字体属性,则需要在方法底部添加相应的代码-
self.yourLabel.text.font=…

我希望这能回答你的问题


谢谢,吉姆。

我尝试了这个,它解决了我的问题。本质上,字母的高度是上升+下降。这就是标签垂直方向所需的全部空间

1.[commentLabel sizeToFit]//从标签上修剪掉不需要的区域

2.[commentLabel setFrame:CGRectMake(commentLabel.frame.origin.x,commentLabel.frame.origin.y+ABS(commentLabel.font.Downer),commentLabel.frame.size.width,commentLabel.font.ascender+ABS(commentLabel.font.Downer))


//**(2)**中的框架调整通过commentLabel.font.Downer向下移动标签,因为默认情况下,标签是根据其实际底线对齐的,而不是我们在笔记本电脑上使用的实际底线对齐的,而笔记本电脑上的底线是从底线向下悬挂的。如果是标签,底线是下降器的下端。

Jeely-谢谢,但在回顾了我的问题后,我想我需要重新措辞。我能够增加标签的大小以适应字体-这不是真正的问题-请参阅我的更新。很抱歉给你带来了困惑。