Оболочка SwiftUI UITextView, как изменить размер содержимого в соответствии с родительским - PullRequest
0 голосов
/ 20 марта 2020

У меня есть такая оболочка UITextView, и она работает, но когда я помещаю ее в строку списка. Я хотел бы, чтобы он автоматически изменял размер, то есть имел ширину, соответствующую родителю в этом случае List Row VStack {}, и высоту, которая автоматически изменялась в зависимости от длины текста. Текст должен обернуться. Теперь это почти работает, но более длинный текст, такой как URL, выходит за пределы доступной ширины строки.

List {
VStack(alignment: .leading) {
     if self.hasNote {
        TextView(text: text)

     }
}
struct TextView: UIViewRepresentable {

    // MARK: - Properties
    let text: String

    init(text: String) {
        self.text = text
    }

    func makeUIView(context: Context) -> UITextView {

        let textView = UITextView()
        //textView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        textView.backgroundColor = UIColor.clear
        textView.isScrollEnabled = false
        textView.attributedText = self.attributedText
        textView.textContainer.lineBreakMode = .byWordWrapping
        //textView.layoutIfNeeded()
        textView.sizeToFit()
        return textView
    }

}

ОБНОВЛЕНИЕ

Теперь у меня есть что-то вроде этого, оно подходит родительскому SwiftUI представления (строки в списке), но вместо этого он не переносит текст (или не растягивает по вертикали в зависимости от размера содержимого. При прокрутке он корректно переносит текст. Также, если я установил .frame (height: 500), я вижу, что он переносит текст. Но это не Неправильный размер.

 func makeUIView(context: Context) -> UITextView {

        let textView = UITextView()

        textView.backgroundColor = UIColor.clear
        textView.isScrollEnabled = false
        textView.isSelectable = true

        let linkAttrs : [NSAttributedString.Key : Any]  = [
            .foregroundColor: accentColor,
            .underlineColor: accentColor,
            .underlineStyle: NSUnderlineStyle.single.rawValue
        ]

        textView.linkTextAttributes = linkAttrs
        textView.attributedText = self.attributedText
        textView.textContainer.lineBreakMode = .byWordWrapping

        textView.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
        textView.setContentCompressionResistancePriority(.defaultHigh, for: .vertical)
        textView.setContentHuggingPriority(.defaultHigh, for: .horizontal)
        textView.setContentHuggingPriority(.defaultLow, for: .vertical)
        textView.sizeToFit()

        return textView
    }
...