I tried using the new AttributedString
in SwiftUI 3
I want to change the alignment, but it won't work.
Any things else is working fine, for example I tried change color using attributedString it does work !. But I cannot do anything with paragraphStyle
struct ContentView: View {
var body: some View {
ZStack {
Color(uiColor: UIColor(red: 0.92, green: 0.92, blue: 0.92, alpha: 1.00)).ignoresSafeArea()
VStack {
Text("""
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
""" ) { string in
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .right
string.paragraphStyle = paragraphStyle
string.foregroundColor = .blue
}
.padding()
.textSelection(.enabled)
Spacer()
}
}
}
}
extension Text {
init(_ string: String, configure: ((inout AttributedString) -> Void)) {
var attributedString = AttributedString(string) /// create an `AttributedString`
configure(&attributedString) /// configure using the closure
self.init(attributedString) /// initialize a `Text`
}
}
CodePudding user response:
As you said . AttributedString not working on SwiftUI . Actually Text
satisfy doing everything AttributedString can.
paragraphStyle is useful if your text has more then 1 line. SwiftUI says. if you have 1 line use
Text("bla bla").frame(maxWidth: .infinity, alignment: .trailing)
If you have text that can be more then 1 line use
var body: some View {
ZStack {
Color(UIColor(red: 0.92, green: 0.92, blue: 0.92, alpha: 1.00)).ignoresSafeArea()
VStack{
Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.")
.frame(maxWidth: .infinity, alignment: .trailing)
.multilineTextAlignment(textAlignment)
Spacer()
}
}
}
let textAlignment: TextAlignment = {
var textAlign = TextAlignment.trailing
if UIApplication.shared.userInterfaceLayoutDirection == .leftToRight {
textAlign = TextAlignment.trailing
} else {
textAlign = TextAlignment.leading
}
return textAlign
}()
CodePudding user response:
The paragraphStyle
attribute is defined in the UIKit
scope but not on the SwiftUI
, so you can't expect it to work.
The alternative is to use the modifier .multilineTextAlignment(.trailing)
.