iOS设置行高后,单行文字底部出现空隙
2019-08-12 本文已影响0人
迷路的字母C
iOS使用以下代码设置行高以后,会发现,如果文字是单行中文时,无论是用NSAttributedString的尺寸计算还是用UILabel的sizeToFit方式,所获取的尺寸信息,都会使UILabel在展示上出现异常——底部出现一个空白。
NSMutableDictionary *attrInfo = [[NSMutableDictionary alloc] init];
NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init];
[pStyle setLineSpacing:20];
[attrInfo setObject:pStyle forKey:NSParagraphStyleAttributeName];
[attrInfo setObject:[UIFont systemFontOfSize:20] forKey:NSFontAttributeName];
可以用判断单行还是多行去决定是否设置行高的方式解决这个问题。
用xib设置一个UILabel的attributedString,发现单行的情况并没有这个问题。后来对比了,才发现根本问题不是ParagraphStyle的问题,而是font的问题。xib里面的字体是PingFangSC-Regular。但是刚才代码里面的是SFUIDisplay。替换了字体以后显示正常了。
曾经,我以为这样就完事了,完美解决,只要是iOS9之后的设备都没有问题了。知道我试图给某一段文字加个颜色。比如像下面这样
[attrString01 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(2, 1)];
然后一切都回到了原点。后来在xib里面实验,发现,xib里面也是这样的,换了一些中文字体以后,这个问题依然存在。。。。。这应该是UILabel绘制排版引起的,目前在UITextView上没发现这个问题。
感觉还是开始的方法靠谱些。