Как включить частичное выделение текста в SwiftUI, например iOS 26 iMessageIOS

Программируем под IOS
Ответить
Anonymous
 Как включить частичное выделение текста в SwiftUI, например iOS 26 iMessage

Сообщение Anonymous »

В iOS 26 в приложении iMessages есть функция, позволяющая выделить только часть текста. Смотрите скриншоты ниже. Как мы можем добиться такого выбора в SwiftUI? Я пробовал использовать модификатор .textSelection(.enabled), но он отображает только параметры копирования и публикации.
Изображение

Изображение

Обновление:
Я попробовал решение @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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»