diff --git a/AltStore/Components/CollapsingTextView.swift b/AltStore/Components/CollapsingTextView.swift index 656a8fcb..8ffef7a3 100644 --- a/AltStore/Components/CollapsingTextView.swift +++ b/AltStore/Components/CollapsingTextView.swift @@ -22,19 +22,57 @@ class CollapsingTextView: UITextView } } - var lineSpacing: CGFloat = 2 { + var lineSpacing: Double = 2 { didSet { - self.setNeedsLayout() + if #available(iOS 16, *) + { + self.updateText() + } + else + { + self.setNeedsLayout() + } + } + } + + override var text: String! { + didSet { + guard #available(iOS 16, *) else { return } + self.updateText() } } let moreButton = UIButton(type: .system) + override init(frame: CGRect, textContainer: NSTextContainer?) + { + super.init(frame: frame, textContainer: textContainer) + + self.initialize() + } + + required init?(coder: NSCoder) + { + super.init(coder: coder) + } + override func awakeFromNib() { super.awakeFromNib() - self.layoutManager.delegate = self + self.initialize() + } + + private func initialize() + { + if #available(iOS 16, *) + { + self.updateText() + } + else + { + self.layoutManager.delegate = self + } self.textContainerInset = .zero self.textContainer.lineFragmentPadding = 0 @@ -108,6 +146,25 @@ private extension CollapsingTextView { self.isCollapsed.toggle() } + + @available(iOS 16, *) + func updateText() + { + do + { + let style = NSMutableParagraphStyle() + style.lineSpacing = self.lineSpacing + + var attributedText = try AttributedString(self.attributedText, including: \.uiKit) + attributedText[AttributeScopes.UIKitAttributes.ParagraphStyleAttribute.self] = style + + self.attributedText = NSAttributedString(attributedText) + } + catch + { + print("[ALTLog] Failed to update CollapsingTextView line spacing:", error) + } + } } extension CollapsingTextView: NSLayoutManagerDelegate