样式文本 1.3.0

样式文本 1.3.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2020年10月
SPM支持SPM

John MejiaBA Device Lab维护。



  • huebnerob

    样式文本   BuddyBuild

样式文本是一个库,它简化了在iOS应用程序中设置动态文本样式。您不需要在每次需要更新文本时都使用富文本字符串,您可以在标签上声明性地设置一个文本样式。当标签的文本更新时,标签会使用预设的样式。

之前

let label = UILabel()
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 4.0
let attributes: [String: Any] = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 14),
                                 NSForegroundColorAttributeName: UIColor.blue,
                                 NSKernAttributeName: 1.5,
                                 NSParagraphStyleAttributeName: paragraphStyle]

let string = NSAttributedString(string: "This is a string",
                                attributes: attributes)
label.attributedText = string
let newString = NSAttributedString(string: "This is a new string",
                                   attributes: attributes)
label.attributedText = newString

之后

let styledLabel = StyledLabel()
styledLabel.textStyle = TextStyle(font: .boldSystemFont(ofSize: 14), color: .blue, lineSpacing: 4.0, kern: 1.5)
styledLabel.text = "This is a string"
styledLabel.text = "This is a new string"

安装

  1. 将此行添加到您的Podfile中
pod "StyledText"
  1. 运行 pod install
  2. 一切准备就绪!

如何使用

使用StyledText很容易,只需将一个StyledLabel添加到您的视图中,并提供一个TextStyle。之后,它就像任何其他的UILabel一样表现。对标签的text属性的更改将始终使用设置的textStyle

class ViewController: UIViewController {
    private let styledLabel: StyledLabel = {
        let label = StyledLabel(frame: .zero)
        label.textStyle = TextStyle(font: .boldSystemFont(ofSize: 24.0),
                                    color: .orange)
        return label
    }()
}

TextStyle

TextStyle表示样式化视图绘制文本时应使用的属性。支持许多不同的文本格式化选项,包括之前需要与属性字符串或段落样式交互的选项,例如字距和行距。创建一个TextStyle很容易,只需指定一个字体,以及您想要定义的任何其他属性。未指定的属性将保持为系统默认值。

let style = TextStyle(font: .italicSystemFont(ofSize: 72),
                      color: .magenta,
                      lineSpacing: 10,
                      lineHeightMultiple: 2.0,
                      kern: -0.5,
                      alignment: .left,
                      lineBreakMode: .byTruncatingMiddle)

let blueStyle = style.with(color: .blue)
let redStyle = style.with(color: .red)

提供默认值

您可能有适用于字体合理的默认值,这对于您的字体来说效果很好。无需在您创建的每个单独的TextStyle中指定此字距值,您可以使用TextStyleDefaultsGenerator来自动添加它。开始使用此方法的最简单方法是扩展TextStyle以符合TextStyleDefaultsGenerator协议,库将检测您是否已添加此协议,并以适当的方式表现。

extension TextStyle: TextStyleDefaultsGenerator {
    private static let defaultCeraKern: CGFloat = -0.2
    private static let defaultChronicleKern: CGFloat = -0.2

    static public func defaultKern(for font: UIFont) -> CGFloat? {
        if font.fontName.contains("Cera") {
            return defaultCeraKern
        } else if font.fontName.contains("Chronicle") {
            return defaultChronicleKern
        }
        return nil
    }
}

动态字体支持

StyledText 支持将文本内容缩放至系统字体大小,这是苹果公司称为 动态字体 的功能。要使用此功能,请将 TextStyledynamicTypeBehavior 属性设置为以下值之一

  • noScaling: [默认] 保持字体大小不变,即使系统字体大小更改
  • scaleToStandardSizes: 将字体缩放到所有标准系统字体大小,更大的可访问性大小被限制在最大标准大小
  • scaleToAllSizes: 将字体缩放到所有标准和可访问性字体大小

在您的应用程序运行期间,字体大小可能会更改。当发生这种情况时,您需要调用可见的任何样式化组件上的 refreshStyle() 以更新大小。一种不错的方式来监听此事件是向共享的 DynamicTypeController 添加一个代理

class MyViewController: UIViewController, DynamicTypeControllerDelegate {
    let label: StyledLabel = {
        let label = StyledLabel()
        label.textStyle = TextStyle(font: .boldSystemFont(ofSize: 14), color: .black, dynamicTypeBehavior: .scaleToStandardSizes)
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        DynamicTypeController.shared.addDelegate(self)
    }

    func preferredContentSizeCategoryDidUpdate(controller: DynamicTypeController, newCategory: UIContentSizeCategory){
        label.refreshStyle()
    }
}

样式化组件

为了启用自动样式,StyledText 使用多个视图子类,这些子类是传统 UIKit 组件的简单替换

StyledText 视图 替换 UIKit 视图
StyledLabel UILabel
StyledTextView UITextView
StyledButton* UIButton

[*] 使用 StyledButton

StyledButton 为每个 UIControlState 按钮状态提供文本样式属性

控件状态 文本样式属性
.normal normalTextStyle
.highlighted highlightedTextStyle
.disabled disabledTextStyle
.selected selectedTextStyle

许可

StyledText 可在 MIT 许可证下获得。有关更多信息,请参阅 LICENSE 文件。