// // ComposeReplyContentView.swift // Tusker // // Created by Shadowfacts on 8/22/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import SwiftUI import Pachyderm struct ComposeReplyContentView: UIViewRepresentable { typealias UIViewType = ComposeReplyContentTextView let status: any StatusProtocol let mastodonController: MastodonController let heightChanged: (CGFloat) -> Void func makeUIView(context: Context) -> UIViewType { let view = ComposeReplyContentTextView() view.isUserInteractionEnabled = false // scroll needs to be enabled, otherwise the text view never reports a contentSize greater than 1 line view.isScrollEnabled = true view.backgroundColor = .clear view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) view.adjustsFontForContentSizeCategory = true view.overrideMastodonController = mastodonController let content = TimelineStatusCollectionViewCell.htmlConverter.convert(status.content) let collapsedContent = NSMutableAttributedString(attributedString: content) collapsedContent.collapseWhitespace() collapsedContent.trimLeadingCharactersInSet(.whitespacesAndNewlines) collapsedContent.trimTrailingCharactersInSet(.whitespacesAndNewlines) view.attributedText = collapsedContent return view } func updateUIView(_ uiView: UIViewType, context: Context) { uiView.heightChanged = heightChanged } } class ComposeReplyContentTextView: StatusContentTextView { var heightChanged: ((CGFloat) -> Void)? override func layoutSubviews() { super.layoutSubviews() heightChanged?(contentSize.height) } }