Вопрос или проблема
В настоящее время я переписываю приложение для чтения книг с UIKit на SwiftUI. У меня есть вопрос, и, возможно, кто-то сталкивался с этим при работе с Text в SwiftUI.
У меня есть NSMutableAttributedString, который содержит NSMutableParagraphStyle, устанавливающий paragraphSpacing.
Когда я это просматриваю в UIKit, всё отображается правильно (отступы арасма применяются). Однако, когда я оборачиваю это в AttributedString и использую в Text (SwiftUI), отступы игнорируются.
Я посмотрел документацию и заметил, что AttributedString в SwiftUI пока не поддерживает paragraphSpacing. На данный момент единственное, что я вижу в качестве обходного пути, это оставить эту часть в UIKit.
Кто-нибудь нашел способ сделать это работающим в SwiftUI?
- проверил документацию
- проверил git
- проверил форумы
Ответ или решение
К сожалению, на данный момент в SwiftUI действительно нет полноценной поддержки настройки paragraphSpacing
через AttributedString
, что может вызывать сложности при переносе приложений с UIKit, где такие настройки доступны. Однако, существуют некоторые обходные пути, которые могут помочь вам достичь желаемого эффекта в SwiftUI.
Обходные пути для настройки отступов между абзацами в SwiftUI
-
Использование
Text
с несколькими строками:
Вместо использованияAttributedString
, вы можете воспользоваться массивомText
для создания текста с необходимым отступом между абзацами.struct ContentView: View { var body: some View { VStack(alignment: .leading, spacing: 10) { // Здесь вы можете установить spacing для отступов между абзацами Text("Первый абзац текста.") Text("Второй абзац текста.") Text("Третий абзац текста.") } .padding() } }
-
Использование UIKit через UIViewRepresentable:
Если вам необходимо сохранить форматирование текста (включаяparagraphSpacing
), вы можете вернутьUILabel
илиUITextView
с использованиемUIViewRepresentable
, что позволит вам использоватьNSMutableAttributedString
как в UIKit.import SwiftUI struct AttributedTextView: UIViewRepresentable { var attributedString: NSAttributedString func makeUIView(context: Context) -> UILabel { let label = UILabel() label.numberOfLines = 0 label.attributedText = attributedString return label } func updateUIView(_ uiView: UILabel, context: Context) { uiView.attributedText = attributedString } } struct ContentView: View { var body: some View { let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.paragraphSpacing = 10 // Пример отступа let attributedString = NSMutableAttributedString(string: "Ваш текст здесь.\n\nЕще один абзац.") attributedString.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attributedString.length)) AttributedTextView(attributedString: attributedString) .padding() } }
-
Следите за обновлениями SwiftUI:
SwiftUI активно развивается, и в следующих версиях могут быть добавлены более мощные средства для работы с атрибутированным текстом. Рекомендуется следить за обновлениями и официальной документацией для получения актуальной информации о новых функциях.
Заключение
На данный момент, для решения проблемы с отступами между абзацами в SwiftUI, вы можете воспользоваться вышеуказанными обходными путями, которые позволят вам сохранить форматирование текста. Надеюсь, это поможет вам в разработке вашего приложения. Если у вас будут дополнительные вопросы, не стесняйтесь задавать!