Я использую оболочку UIViewRepresentable
для создания привязываемой многострочной UITextVIew
, поскольку все еще не поддерживает многострочной поддержки собственного SwiftUI TextField
. Все работает нормально, если в UITextView установлено isScrollEnabled = true
.
Есть ли способ получить текст для переноса без прокрутки UITextView
?
import SwiftUI
struct TextfieldIssue: View {
@State var text: String = "Hello, I am some long text that will wrap if isScrollEnabled is set to true, but not if isScrollEnabled is set to false"
var body: some View {
MultilineTextField(text: $text)
}
}
struct MultilineTextField: UIViewRepresentable {
private let view = UITextView()
@Binding var text: String
func makeUIView(context: UIViewRepresentableContext<MultilineTextField>) -> UITextView {
view.isEditable = true
view.font = UIFont.systemFont(ofSize: 24)
// Text wraps fine as long as this is true
view.isScrollEnabled = true
// Text does not wrap if this is uncommented
// view.isScrollEnabled = false
view.text = text
view.delegate = context.coordinator
return view
}
func updateUIView(_ uiView: UITextView, context: UIViewRepresentableContext<MultilineTextField>) {
uiView.text = text
}
func makeCoordinator() -> TextFieldCoordinator {
let coordinator = TextFieldCoordinator(self)
self.view.delegate = coordinator
return coordinator
}
}
class TextFieldCoordinator : NSObject, UITextViewDelegate {
var parent: MultilineTextField
init(_ multilineTextField: MultilineTextField) {
self.parent = multilineTextField
}
func textViewDidChange(_ textView: UITextView) {
self.parent.text = textView.text
}
}
struct TextfieldIssue_Previews: PreviewProvider {
static var previews: some View {
TextfieldIssue()
}
}