

Обновление:
Я попробовал решение @Subh Karan, но мне не удалось подогнать UITextView под размер содержимого. В настоящее время он занимает всю ширину. См. изображение ниже.

Вот моя текущая реализация
HStack {
Spacer(minLength: 40)
SelectableTextView(text: message.body, textColor: .white)
.fixedSize(horizontal: false, vertical: true)
.frame(minWidth: 0,
maxWidth: UIScreen.main.bounds.width * 0.75,
alignment: .trailing)
.padding(.horizontal)
}
struct SelectableTextView: UIViewRepresentable {
var text: String
var textColor: UIColor
func makeUIView(context: Context) -> UITextView {
let view = ChatTextView()
view.isEditable = false
view.isSelectable = true
view.isScrollEnabled = false
view.backgroundColor = .red
view.textContainerInset = .zero
view.textContainer.lineFragmentPadding = 0
view.font = UIFont.systemFont(ofSize: 17)
view.textColor = textColor
view.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
view.setContentHuggingPriority(.required, for: .vertical)
return view
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
}
}
final class ChatTextView: UITextView {
override var intrinsicContentSize: CGSize {
// Force height based on actual content
let size = self.sizeThatFits(CGSize(width: self.bounds.width, height: .greatestFiniteMagnitude))
return CGSize(width: size.width, height: size.height)
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... 6-imessage
Мобильная версия