- Constructing rich text using interpolation, Smooth coding, Elegant and natural style.
- More control extension support.
- Support for multi-level rich text cascading and provide other style priority strategies.
- Support for all
NSAttributedString.Keyfunctions. - Support iOS & macOS & watchOS & tvOS.
- Support text and attachment click event callback.
- Continue to add more new features.
pod 'AttributedString'github "lixiang1994/AttributedString"Select Xcode menu File > Swift Packages > Add Package Dependency and enter repository URL with GUI.
Repository: https://github.com/lixiang1994/AttributedString
Add the following to the dependencies of your Package.swift:
.package(url: "https://github.com/lixiang1994/AttributedString.git", from: "version")First make sure to import the framework:
import AttributedStringHow to initialize:
// Normal
let a: AttributedString = .init("lee", .font(.systemFont(ofSize: 13)))
// Interpolation
let b: AttributedString = "\("lee", .font(.systemFont(ofSize: 13)))"Here are some usage examples. All devices are also available as simulators:
textView.attributed.text = """
\("fontSize: 13", .font(.systemFont(ofSize: 13)))
\("fontSize: 20", .font(.systemFont(ofSize: 20)))
\("fontSize: 22 weight: semibold", .font(.systemFont(ofSize: 22, weight: .semibold)))
"""textView.attributed.text = """
\("foregroundColor", .color(.white))
\("foregroundColor", .color(.red))
"""textView.attributed.text = """
\("strikethrough: single", .strikethrough(.single))
\("strikethrough: double color: .red", .strikethrough(.double, color: .red))
"""textView.attributed.text = """
\(.image(UIImage(named: "xxxx")))
\(.image(UIImage(named: "xxxx"), .custom(size: .init(width: 200, height: 200))))
\(.image(UIImage(named: "xxxx"), .proposed(.center))).
"""let a: AttributedString = .init("123", .background(.blue))
let b: AttributedString = .init("456", .background(.red))
textView.attributed.text = "\(wrap: a) \(wrap: b, .paragraph(.alignment(.center)))"
// Defalut embedding mode, Nested internal styles take precedence over external styles
textView.attributed.text = "\(wrap: a, .paragraph(.alignment(.center)))"
textView.attributed.text = "\(wrap: .embedding(a), .paragraph(.alignment(.center)))"
// Override mode, Nested outer style takes precedence over inner style
textView.attributed.text = "\(wrap: .override(a), .paragraph(.alignment(.center)))"let a: AttributedString = .init("123", .background(.blue))
let b: AttributedString = .init("456", .background(.red))
let c: AttributedString = .init("789", .background(.gray))
textView.attributed.text = a + b
textView.attributed.text += c// Text
let a: AttributedString = .init("lee", .action({ }))
// Attachment (image)
let b: AttributedString = .init(.image(image), action: {
// code
})
// It is recommended to use functions as parameters.
func click() {
// code
}
// Normal
let c: AttributedString = .init("lee", .action(click))
let d: AttributedString = .init(.image(image), action: click)
// Interpolation
let e: AttributedString = "\("lee", .action(click))"
let f: AttributedString = "\(.image(image), action: click)"
// More information.
func click(_ action: AttributedString.Action) {
switch action.content {
case .string(let value):
print("Currently clicked text: \(value) range: \(action.range)")
case .attachment(let value):
print("Currently clicked attachment: \(value) range: \(action.range)")
}
}
label.attributed.text = "This is \("Label", .font(.systemFont(ofSize: 20)), .action(click))"
textView.attributed.text = "This is a picture \(.image(image, .custom(size: .init(width: 100, height: 100))), action: click) Displayed in custom size."For more examples, see the sample application.
The following properties are available:
| PROPERTY | TYPE | DESCRIPTION |
|---|---|---|
| font | UIFont |
font |
| color | UIColor |
foreground color |
| background | UIColor |
background color |
| paragraph | ParagraphStyle |
paragraph attributes |
| ligature | Bool |
Ligatures cause specific character combinations to be rendered using a single custom glyph that corresponds to those characters |
| kern | CGFloat |
kerning |
| strikethrough | NSUnderlineStyle . UIColor |
strikethrough style and color (if color is nil foreground is used) |
| underline | NSUnderlineStyle , UIColor |
underline style and color (if color is nil foreground is used) |
| link | String / URL |
URL |
| baselineOffset | CGFloat |
character’s offset from the baseline, in point |
| shadow | NSShadow |
shadow effect of the text |
| stroke | CGFloat, UIColor |
stroke width and color |
| textEffect | NSAttributedString.TextEffectStyle |
text effect |
| obliqueness | CGFloat |
text obliqueness |
| expansion | CGFloat |
expansion / shrink |
| writingDirection | WritingDirection / [Int] |
initial writing direction used to determine the actual writing direction for text |
| verticalGlyphForm | Bool |
vertical glyph (Currently on iOS, it's always horizontal.) |
If you have the need for a specific feature that you want implemented or if you experienced a bug, please open an issue. If you extended the functionality of AttributedString yourself and want others to use it too, please submit a pull request.
AttributedString is under MIT license. See the LICENSE file for more info.






