36 lines
1.8 KiB
Diff
36 lines
1.8 KiB
Diff
diff --git a/ios/RNUITextViewShadow.swift b/ios/RNUITextViewShadow.swift
|
|
index c34ba712ca628ed8cf2db0f9fc332810ec86d34d..3602856dc8cd926b5321b4ecb109be9c00a23fe6 100644
|
|
--- a/ios/RNUITextViewShadow.swift
|
|
+++ b/ios/RNUITextViewShadow.swift
|
|
@@ -159,13 +159,25 @@ class RNUITextViewShadow: RCTShadowView {
|
|
let maxSize = CGSize(width: CGFloat(maxWidth), height: CGFloat(MAXFLOAT))
|
|
let textSize = self.attributedText.boundingRect(with: maxSize, options: .usesLineFragmentOrigin, context: nil)
|
|
|
|
- var totalLines = self.lineHeight == 0.0 ? 0 : Int(ceil(textSize.height / self.lineHeight))
|
|
-
|
|
- if self.numberOfLines != 0, totalLines > self.numberOfLines {
|
|
- totalLines = self.numberOfLines
|
|
+ var finalHeight: CGFloat
|
|
+
|
|
+ if self.numberOfLines != 0 && self.lineHeight != 0.0 {
|
|
+ // numberOfLines is set with custom line height - need to calculate lines and snap to lineHeight multiples
|
|
+ // NOTE: this calculation can be inaccurate with fractional font sizes
|
|
+ var totalLines = Int(ceil(textSize.height / self.lineHeight))
|
|
+ if totalLines > self.numberOfLines {
|
|
+ totalLines = self.numberOfLines
|
|
+ }
|
|
+ finalHeight = CGFloat(totalLines) * self.lineHeight
|
|
+ } else {
|
|
+ // Either no numberOfLines limit, or no custom lineHeight - use actual text height
|
|
+ // (numberOfLines without custom lineHeight is handled by the UITextView's textContainer.maximumNumberOfLines)
|
|
+ finalHeight = textSize.height
|
|
}
|
|
|
|
- self.frameSize = CGSize(width: CGFloat(maxWidth), height: CGFloat(CGFloat(totalLines) * self.lineHeight))
|
|
+ finalHeight = ceil(finalHeight)
|
|
+
|
|
+ self.frameSize = CGSize(width: CGFloat(maxWidth), height: finalHeight)
|
|
return YGSize(width: Float(self.frameSize.width), height: Float(self.frameSize.height))
|
|
}
|
|
|