Я пытаюсь выяснить, как сделать размер UITextView зависимым от его содержимого в SwiftUI. Я обернул UITextView в UIViewRepresentable
следующим образом:
struct TextView: UIViewRepresentable {
@Binding var showActionSheet: Bool
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> UITextView {
let uiTextView = UITextView()
uiTextView.delegate = context.coordinator
uiTextView.font = UIFont(name: "HelveticaNeue", size: 15)
uiTextView.isScrollEnabled = true
uiTextView.isEditable = true
uiTextView.isUserInteractionEnabled = true
uiTextView.backgroundColor = UIColor(white: 0.0, alpha: 0.05)
uiTextView.isEditable = false
return uiTextView
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.attributedText = prepareText(question: question)
var frame = uiView.frame
frame.size.height = uiView.contentSize.height
uiView.frame = frame
}
func prepareText(text: string) -> NSMutableAttributedString {
...................
return attributedText
}
class Coordinator : NSObject, UITextViewDelegate {
var parent: TextView
init(_ view: TextView) {
self.parent = view
}
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
parent.showActionSheet = true
return false
}
}
}
Далее я попытался изменить размер кадра в updateUIView на основе его размера содержимого, но это не имело никакого эффекта. Я полагаю, что на этом этапе представление не является даже макетом, и его кадр переопределяется где-то еще. Буду очень признателен, если кто-нибудь укажет мне правильное направление.