SwiftStylish 是一个 Swift 框架,允许您使用样式文件以方便的方式样式化 UI 元素。
要求
- iOS 13.0+
- Xcode 11.0+
- Swift 5.0+
安装
CocoaPods
CocoaPods 是 Cocoa项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 SwiftStylish 集成到您的 Xcode 项目中,在 Podfile 中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target 'TargetName' do
pod 'SwiftStylish'
end
然后,运行以下命令
$ pod install
用法
将 import "SwiftStylish"
添加到您打算使用该框架的地方。
框架为您提供了 SwiftStylisher
包装器。
- 应用样式类到元素
try SwiftStylisher.default.loadFile(filename: "HomeStyle", bundle: styleFileBundle)
try SwiftStylisher.default.applyStyle(className: ".nameLabel", forObject: self.usernameLabel)
-
使用变量应用样式类
- 从文件加载变量并加载样式文件。
- 应用样式。
try SwiftStylisher.default.loadVariablesFile(filename: "StyleVariables", bundle: styleFileBundle)
try SwiftStylisher.default.loadFile(filename: "HomeStyle", bundle: styleFileBundle)
try SwiftStylisher.default.applyStyle(className: ".nameLabel", forObject: self.usernameLabel)
查看SwiftStyle是如何工作的获取关于应用样式的信息。
变量
框架支持变量,存储在独立的样式类文件中。任何文件类型都可以使用。
变量必须使用键分割成根级组
以下情况下变量不会被解析
- 变量的类型与组类型不匹配。
- 使用类解析方法解析。
错误
title_font
的值不会被解析。
{
"_description": "wrong colors",
"@colors":{
"title_font": { "name": "Arial", "size": 16 },
}
}
正确
{
"@colors":{
"light_background": "#6ef2d1",
"dark_background": "#0e9a8e"
},
"@fonts":{
"title_font": { "name": "Arial", "size": 16 },
"selected_cell_font": { "name": "Arial", "size": 12 }
},
"@numbers":
{
"label_number_of_lines": 3,
"pading": 10,
"width": 170
}
}
支持注释和其他文件的引入。
{
"_description": "Blue theme includes.",
"@include": ["BlueThemeColors", "BlueThemeFonts", "BlueThemeNumbers"]
}
文件加载器
要应用样式,首先需要从文件中加载它们。框架为您提供JSON和Plist文件的加载器。
可以通过实现LoaderProtocol
协议来创建其他文件类型的加载器。
支持的文件格式
默认情况下,SwiftStylish支持以下文件类型
- JSON -
JSONLoader
- Plist -
PlistLoader
不能引用或不从不同文件类型的文件继承。建议使用一个文件类型来完成项目。样式文件可以是不同文件类型,如果没有引用其他文件类型的文件则是允许的。
示例
JSON格式在该项目中使用。您想要在一些屏幕上使用PLIST。此PLIST文件不能引用JSON文件。解析器将搜索类似类型的文件,即PLIST。
样式库
解析器完成工作后,所有解析的资源都存储在StyleRepository
中。
描述
可以使用 _description
键添加注释。此键不会影响任何内容。您可以在 JSON 体的任何地方自由添加。
{
"_description": "this is a description for style file.",
"@classes": {
"_description": "This is a base rounded button class.",
".roundedButton": {
"_description": "Red background color property.",
"background-color": "#ff0000"
}
}
}
系统键
支持的系统键
- @classes
- @preload
- @state
- @include
类 (@classes)
每个样式文件必须包含具有字典值的基本元素 @classes
。
文件的所有根类是这个基本字典中的键。
{
"_description":"this is a description for style file.",
"@classes":{
"_description":"base rounded button style definition.",
".roundedButton":{
"_description":"Red background color property.",
"background-color":"#ff0000",
".saveButton":{
"@preload":".roundedButton",
"text":"Save"
},
".deleteButton":{
"@preload":".roundedButton",
"text":"Delete"
}
},
".tableView":{
"background-color":"#30a9f2",
".header":{
"background-color":"clear"
}
}
}
}
类继承(@preload & @include)
可以使用 @preload
键通过单个类或多个类实现样式类的继承。
语法
"@preload": [ String ]
"@preload": String
作为字符串或它们的数组接受完整的类路径。
可以使用 @include
键包含其他文件的类。
传递一个包含与当前样式文件相同类型的文件名的数组。
语法
"@include": [ String ]
首先向仓库加载父样式中的属性,然后设置子样式中的其他属性。
示例
{
"@include":[
"ParserTests1"
],
"@classes":{
"_description":"Description for root class.",
".root":{
".class1":{
"background-color":"#0000ff",
"color":"#ff0"
},
".class2":{
"@preload":".root.class1",
"background-color":"#00ff00"
},
".class3":{
"@preload":[
".root.class1",
".root.class2"
],
"background-color":"#ff0000"
}
}
}
}
在这个例子中,class3
中的结果 backgrounColor 值为 #ff0000。
控制状态 (@state )
可以使用 @state
键指定任何支持它的 UI 元素的控制状态。
有关详细信息,请参阅 控制状态。
支持样式键与值
查看所有支持的样式键,请访问 支持的键。
查看所有支持的值类型,请访问 值。
许可协议
SwiftStylish 采用 MIT 许可协议发布。详细信息请查看 LICENSE
文件。