Fixes CollapsingTextView “More” button incorrectly appearing if lineCount == maximumNumberOfLines

This commit is contained in:
Riley Testut
2023-05-24 17:30:38 -05:00
parent 11ade8e54b
commit c50e351e88

View File

@@ -119,13 +119,13 @@ class CollapsingTextView: UITextView
{ {
if self.isCollapsed if self.isCollapsed
{ {
self.textContainer.maximumNumberOfLines = self.maximumNumberOfLines
let boundingSize = self.attributedText.boundingRect(with: CGSize(width: self.textContainer.size.width, height: .infinity), options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil) let boundingSize = self.attributedText.boundingRect(with: CGSize(width: self.textContainer.size.width, height: .infinity), options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil)
let maximumCollapsedHeight = font.lineHeight * Double(self.maximumNumberOfLines) let maximumCollapsedHeight = font.lineHeight * Double(self.maximumNumberOfLines) + self.lineSpacing * Double(self.maximumNumberOfLines - 1)
if boundingSize.height.rounded() > maximumCollapsedHeight.rounded() if boundingSize.height.rounded() > maximumCollapsedHeight.rounded()
{ {
self.textContainer.maximumNumberOfLines = self.maximumNumberOfLines
var exclusionFrame = moreButtonFrame var exclusionFrame = moreButtonFrame
exclusionFrame.origin.y += self.moreButton.bounds.midY exclusionFrame.origin.y += self.moreButton.bounds.midY
exclusionFrame.size.width = self.bounds.width // Extra wide to make sure it wraps to next line. exclusionFrame.size.width = self.bounds.width // Extra wide to make sure it wraps to next line.
@@ -135,6 +135,7 @@ class CollapsingTextView: UITextView
} }
else else
{ {
self.textContainer.maximumNumberOfLines = 0 // Fixes last line having slightly smaller line spacing.
self.textContainer.exclusionPaths = [] self.textContainer.exclusionPaths = []
self.moreButton.isHidden = true self.moreButton.isHidden = true