UILabel *lblDemo = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 30)];
lblDemo.text = @"gyjqaab";
lblDemo.font = [UIFont systemFontOfSize:30];
lblDemo.textColor = [UIColor blackColor];
[self.view addSubview:lblDemo];
光看上面代码,可能觉得没什么问题,但是真机跑出来的效果如下
上图中四个字母底部都被“截”掉了一小部分,如果内容是其他英文字母则展示正常。经过尝试发现g,j,q,y,这四个字母则会被截掉,但是如果文本是中英文混排结果又是正常的。
UILabel的Frame高度不能简单的和字体的高度等同,UILabel在不同的字体设置下,对Frame的高度要求也不一样,大多数情况下都比Font的高度设置要高一些。
比如font size为13时,算出高度为16,font size为20时,算出高度为24,所以平常设置UILabel高度的时候,也不能简单的在font height基础之上加随意值。
文本渲染引擎在渲染一行文本的时候都需要在label的顶部和底部预留一小部分空间。