Я смог отрендерить NSAttributedString
s с помощью UIViewRepresentable
, который прекрасно работает, пока я не оберну вид в ScrollView
.
При помещении внутрь ScrollView
представление NSAttributedString
останавливает рендеринг.
Я пробовал некоторые другие методы, которые заменяют NSAttributedString
с добавлением нескольких представлений Text()
вместе в получить форматирование, которое работает внутри ScrollView
и поддерживает курсив и monospace font
. К сожалению, это не работает для ссылок внутри текстовых блоков, что означает, что мне все еще нужно NSAttributedString
.
import SwiftUI
struct TextWithAttributedString: UIViewRepresentable {
var attributedString: NSAttributedString
init(_ attributedString: NSAttributedString) {
self.attributedString = attributedString
}
func makeUIView(context: Context) -> UITextView {
let textView = UITextView(frame: .zero)
textView.attributedText = self.attributedString
textView.isEditable = false
return textView
}
func updateUIView(_ textView: UITextView, context: Context) {
textView.attributedText = self.attributedString
}
}
let exampleText = """
Fugiat id blanditiis et est culpa voluptas. Vivamus aliquet enim eu blandit blandit. Sit eget praesentium maxime sit molestiae et alias aut.
"""
struct NSAttributedStringView: View {
var body: some View {
// Note: when uncommented, the view breaks
// ScrollView {
TextWithAttributedString(NSAttributedString(string: exampleText))
// }
}
}
struct NSAttributedStringView_Previews: PreviewProvider {
static var previews: some View {
NSAttributedStringView()
.previewLayout(.sizeThatFits)
}
}
Редактировать: Я пытался использовать обернутый UITextView
со свойством text
, установленным вместо свойства attributeText
, но это также не удается отобразить в ScrollView
, поэтому проблема, похоже, заключается в UITextView
, а не NSAttributedString
.
Итак, вопрос в том, как заставить UITextView
работать в ScrollView
?