iOS 16.4+下NSAttributedString负baselineOffset值被忽略问题咨询
iOS 16.4中NSAttributedString的baselineOffset异常问题
在针对iOS 16.4版本开发时,我们发现NSAttributedString的baselineOffset属性行为出现了明显变化:
- 正偏移值的处理逻辑较旧版本改变(无需再除以2),该问题已有相关讨论;
- 负偏移值存在两处异常:
- 单独在
NSAttributedString中使用时可正常生效,但会导致UILabel的尺寸增大; - 搭配
NSParagraphStyle的maximumLineHeight和minimumLineHeight属性时,负偏移值会被完全忽略。
- 单独在
复现代码
let label1 = UILabel() let label2 = UILabel() let label3 = UILabel() self.view.addSubview(label1) self.view.addSubview(label2) self.view.addSubview(label3) let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.minimumLineHeight = 20 paragraphStyle.maximumLineHeight = 20 let attr1: [NSAttributedString.Key: Any] = [ .paragraphStyle: paragraphStyle, .baselineOffset: 0] let attr2: [NSAttributedString.Key: Any] = [ .paragraphStyle: paragraphStyle, .baselineOffset: 5] let attr3: [NSAttributedString.Key: Any] = [ .paragraphStyle: paragraphStyle, .baselineOffset: -5] let str1 = NSAttributedString(string: "0 offset", attributes: attr1) let str2 = NSAttributedString(string: "5 offset", attributes: attr2) let str3 = NSAttributedString(string: "-5 offset", attributes: attr3)
版本对比表现
对比iOS 16.4(左)与iOS 16.2(右)模拟器的效果:
- 旧版本(iOS 16.2)中,正偏移值会被莫名放大一倍;
- iOS 16.4中,正偏移表现正常,但设置固定行高后,负偏移被完全忽略。

内容的提问来源于stack exchange,提问作者Elie Hage
相关产品推荐
相关产品推荐

