@@ -19,9 +19,11 @@ class UILabelLayoutManagerDelegate: NSObject, NSLayoutManagerDelegate {
1919
2020 // 当Label发生Scaled时
2121 let scaledMetrics : UILabel . ScaledMetrics ?
22+ let baselineAdjustment : UIBaselineAdjustment
2223
23- init ( _ scaledMetrics: UILabel . ScaledMetrics ? ) {
24+ init ( _ scaledMetrics: UILabel . ScaledMetrics ? , with baselineAdjustment : UIBaselineAdjustment ) {
2425 self . scaledMetrics = scaledMetrics
26+ self . baselineAdjustment = baselineAdjustment
2527 super. init ( )
2628 }
2729
@@ -70,12 +72,37 @@ class UILabelLayoutManagerDelegate: NSObject, NSLayoutManagerDelegate {
7072
7173 // 当Label发生Scaled时 最大行数为1时 基线偏移不会按比例计算
7274 if let scaledMetrics = scaledMetrics, textContainer. maximumNumberOfLines == 1 {
73- // 使用原始基线偏移 使用Scaled的尺寸高度
74- var baseline = baselineOffset. pointee
75- baseline = CGFloat ( scaledMetrics. baselineOffset)
76- baselineOffset. pointee = baseline
77- rect. size. height = scaledMetrics. scaledSize. height
78- used. size. height = scaledMetrics. scaledSize. height
75+ switch baselineAdjustment {
76+ case . alignBaselines:
77+ // 原始的基线偏移 使用Scaled的尺寸高度
78+ var baseline = baselineOffset. pointee
79+ baseline = . init( scaledMetrics. baselineOffset)
80+ baselineOffset. pointee = baseline
81+ rect. size. height = scaledMetrics. scaledSize. height
82+ used. size. height = scaledMetrics. scaledSize. height
83+
84+ case . alignCenters:
85+ print ( scaledMetrics)
86+ // 居中的基线偏移 使用Scaled的尺寸高度
87+ var baseline = baselineOffset. pointee
88+ // 整行的占用高度 - 缩放的行高 = 上下边距; 上边距 = 上下边距 * 0.5; 居中的基线偏移 = 上边距 + 缩放的基线偏移
89+ let margin = ( scaledMetrics. scaledSize. height - . init( scaledMetrics. scaledLineHeight) ) * 0.5
90+ baseline = margin + . init( scaledMetrics. scaledBaselineOffset)
91+ baselineOffset. pointee = baseline
92+ rect. size. height = scaledMetrics. scaledSize. height
93+ used. size. height = scaledMetrics. scaledSize. height
94+
95+ case . none:
96+ // 缩放的基线偏移 使用Scaled的尺寸高度
97+ var baseline = baselineOffset. pointee
98+ baseline = . init( scaledMetrics. scaledBaselineOffset)
99+ baselineOffset. pointee = baseline
100+ rect. size. height = scaledMetrics. scaledSize. height
101+ used. size. height = scaledMetrics. scaledSize. height
102+
103+ default :
104+ break
105+ }
79106 }
80107
81108 // 重新赋值最终结果
0 commit comments