思路:首先判断默认字体是不是满足条件。不满足那就变小直到满足
func getRightFontSize(text:String, defaultFontSize:CGFloat, kernValue:CGFloat) -> (CGFloat,CGFloat) {
let attr: [NSAttributedString.Key:Any] = [.font:UIFont.systemFont(ofSize: defaultFontSize, weight: .bold), .kern: kernValue]
let options: NSStringDrawingOptions =
NSStringDrawingOptions.usesLineFragmentOrigin
let maxSize =CGSize(width:375, height:30)
let boundingRect = text.boundingRect(with: maxSize, options: options, attributes: attr, context:nil)
// 如果大于最大宽度就递归
let maxLabelWidth:CGFloat=150
if boundingRect.size.width > maxLabelWidth {
var kernNumber = kernValue - 1
if (kernValue - 1) < 2 {
kernNumber =2
}
return getRightFontSize(text: text, defaultFontSize: defaultFontSize-1, kernValue: kernNumber)
}
return (defaultFontSize, kernValue)
}
经过上面的方法已经获取了合适的字体大小和间距然后在合适的时机调用即可
///defaultFontSize 默认字体大小 和 默认间距 返回合适的自适应大小
let (fontValue, kernValue) = getRightFontSize(text: "要显示的文本", defaultFontSize: 20, kernValue: 8)
下面就可以开心的设置对应的label文本或者 富文本了 。到此结束