Ich versuche herauszufinden, wie die Größe von UITextView vom Inhalt in SwiftUI abhängig gemacht werden kann. Ich habe die UITextView UIViewRepresentable
wie folgt verpackt :
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
}
}
}
Außerdem habe ich versucht, die Frame-Größe in updateUIView basierend auf der Inhaltsgröße zu ändern, aber es hatte keine Auswirkungen. Ich nehme an, dass die Ansicht zu diesem Zeitpunkt noch nicht einmal ein Layout ist und der Rahmen an einer anderen Stelle überschrieben wird. Ich würde mich sehr freuen, wenn mich jemand in die richtige Richtung weisen könnte.
quelle