From 2adf1b852509bf909d8cbcb50b0f4bdae0bc83b9 Mon Sep 17 00:00:00 2001 From: Guille Gonzalez Date: Fri, 18 Dec 2020 19:39:58 +0100 Subject: [PATCH] Add documentation --- .spi.yml | 5 -- .../Contents.swift | 47 +++++++-------- .../Contents.swift | 47 +++++++-------- .../Contents.swift | 49 ++++++++------- README.md | 56 +++++++++++++++++- .../AttributedText/AttributedText_UIKit.swift | 1 - iOS_screenshot.png | Bin 0 -> 30757 bytes 7 files changed, 125 insertions(+), 80 deletions(-) delete mode 100644 .spi.yml create mode 100644 iOS_screenshot.png diff --git a/.spi.yml b/.spi.yml deleted file mode 100644 index 8d77fb6..0000000 --- a/.spi.yml +++ /dev/null @@ -1,5 +0,0 @@ -version: 1 -builder: - configs: - - platform: watchos - scheme: AttributedText_watchOS diff --git a/Playgrounds/AttributedText_iOS.playground/Contents.swift b/Playgrounds/AttributedText_iOS.playground/Contents.swift index 64ae6c6..7034b10 100644 --- a/Playgrounds/AttributedText_iOS.playground/Contents.swift +++ b/Playgrounds/AttributedText_iOS.playground/Contents.swift @@ -1,34 +1,33 @@ +import AttributedText import PlaygroundSupport import SwiftUI -import AttributedText - -func makeAttributedString() -> NSAttributedString { - let result = NSMutableAttributedString( - string: """ - After the Big Bang - A brief summary of time - Life on earth - 10 billion years - You reading this - 13.7 billion years - """ - ) +struct ContentView: View { + private let attributedString: NSAttributedString = { + let result = NSMutableAttributedString( + string: """ + After the Big Bang + A brief summary of time + Life on earth + 10 billion years + You reading this + 13.7 billion years + """ + ) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) - result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) + result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) - return result -} + return result + }() -struct ContentView: View { var body: some View { - AttributedText(makeAttributedString()) + AttributedText(attributedString) .background(Color.gray.opacity(0.5)) .accentColor(.purple) } diff --git a/Playgrounds/AttributedText_macOS.playground/Contents.swift b/Playgrounds/AttributedText_macOS.playground/Contents.swift index 39cc96b..55960dd 100644 --- a/Playgrounds/AttributedText_macOS.playground/Contents.swift +++ b/Playgrounds/AttributedText_macOS.playground/Contents.swift @@ -1,34 +1,33 @@ +import AttributedText import PlaygroundSupport import SwiftUI -import AttributedText - -func makeAttributedString() -> NSAttributedString { - let result = NSMutableAttributedString( - string: """ - After the Big Bang - A brief summary of time - Life on earth - 10 billion years - You reading this - 13.7 billion years - """ - ) +struct ContentView: View { + private let attributedString: NSAttributedString = { + let result = NSMutableAttributedString( + string: """ + After the Big Bang + A brief summary of time + Life on earth + 10 billion years + You reading this + 13.7 billion years + """ + ) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) - result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) - result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) + result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) + result.addAttributes([.font: NSFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) - return result -} + return result + }() -struct ContentView: View { var body: some View { - AttributedText(makeAttributedString()) + AttributedText(attributedString) .background(Color.gray.opacity(0.5)) .accentColor(.purple) } diff --git a/Playgrounds/AttributedText_tvOS.playground/Contents.swift b/Playgrounds/AttributedText_tvOS.playground/Contents.swift index 7a6d3bd..3cc675f 100644 --- a/Playgrounds/AttributedText_tvOS.playground/Contents.swift +++ b/Playgrounds/AttributedText_tvOS.playground/Contents.swift @@ -1,34 +1,33 @@ +import AttributedText import PlaygroundSupport import SwiftUI -import AttributedText - -func makeAttributedString() -> NSAttributedString { - let result = NSMutableAttributedString( - string: """ - After the Big Bang - A brief summary of time - Life on earth - 10 billion years - You reading this - 13.7 billion years - """ - ) +struct ContentView: View { + private let attributedString: NSAttributedString = { + let result = NSMutableAttributedString( + string: """ + After the Big Bang + A brief summary of time + Life on earth + 10 billion years + You reading this + 13.7 billion years + """ + ) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) - result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) - result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) + result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) - return result -} + return result + }() -struct ContentView: View { var body: some View { - AttributedText(makeAttributedString()) + AttributedText(attributedString) .background(Color.gray.opacity(0.5)) .accentColor(.purple) } @@ -37,5 +36,5 @@ struct ContentView: View { PlaygroundPage.current.setLiveView( ContentView() .frame(width: 800, height: 600) - .background(Color.yellow) + .background(Color(.darkGray)) ) diff --git a/README.md b/README.md index 38731a7..1d4a4e5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,57 @@ # AttributedText -A description of this package. +AttributedText is a Swift µpackage that provides `NSAttributedString` rendering in SwiftUI by wrapping either an `NSTextView` or a `UITextView` depending on the platform. + +## Supported Platforms + +* macOS 11.0+ +* iOS 14.0+ +* tvOS 14.0+ + +## Usage +```swift +import AttributedText + +struct ContentView: View { + private let attributedString: NSAttributedString = { + let result = NSMutableAttributedString( + string: """ + After the Big Bang + A brief summary of time + Life on earth + 10 billion years + You reading this + 13.7 billion years + """ + ) + + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title1)], range: NSRange(location: 0, length: 18)) + result.addAttributes([.link: URL(string: "https://en.wikipedia.org/wiki/Big_Bang")!], range: NSRange(location: 10, length: 8)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 19, length: 23)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 43, length: 13)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 57, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .title2)], range: NSRange(location: 74, length: 16)) + result.addAttributes([.font: UIFont.preferredFont(forTextStyle: .body)], range: NSRange(location: 91, length: 18)) + + return result + }() + + var body: some View { + AttributedText(attributedString) + .background(Color.gray.opacity(0.5)) + .accentColor(.purple) + } +} +``` + +![iOSScreenshot](iOS_screenshot.png) + +An `AttributedText` view takes all the available width and adjusts its height to fit the contents. + +To change the text alignment or line break mode, you need to add a `.paragraphStyle` attribute to the attributed string. + +## Installation +You can add AttributedText to an Xcode project by adding it as a package dependency. +1. From the **File** menu, select **Swift Packages › Add Package Dependency…** +1. Enter `https://github.com/gonzalezreal/AttributedText` into the package repository URL text field +1. Link **AttributedText** to your application target diff --git a/Sources/AttributedText/AttributedText_UIKit.swift b/Sources/AttributedText/AttributedText_UIKit.swift index c9b1495..570a9a5 100644 --- a/Sources/AttributedText/AttributedText_UIKit.swift +++ b/Sources/AttributedText/AttributedText_UIKit.swift @@ -99,7 +99,6 @@ textView.isScrollEnabled = false textView.backgroundColor = .clear textView.textContainer.lineFragmentPadding = 0 - textView.adjustsFontForContentSizeCategory = true textView.delegate = self } } diff --git a/iOS_screenshot.png b/iOS_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbad94ced8a957e371a0671b250a45562eac383 GIT binary patch literal 30757 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 F{{Ss!FjD{k literal 0 HcmV?d00001