Gaikan 使用在 Swift 中的声明式 DSL 提供强大的样式功能。灵感来自 React: CSS in JS 和 CSS 模块。
只需给 UIView(s) 一个 StyleRule
对象,即可对其样式进行操作。
let myLabelStyle = StyleRule() { (inout style: StyleRule) -> () in
style.color = UIColor.redColor()
style.border = Border(width: 1, color: UIColor.greenColor())
style.font = UIFont(name: "Courier", size: 24)
}
self.label.styleInline = myLabelStyle
查看示例来了解如何将 Gaikan 集成到项目中。
styleInline
应用简单的样式……styleClass
进行主题化(下文提供更多信息)。extends
方法共享样式,以避免重复使用。NSAttributedString
设置样式!查看我们的页面以找到用于样式化视图的属性:属性
从 0.4 版本开始,我们也添加了 VirtualView
。这允许您对一些非 UIView
属性/对象应用样式效果
NSObject | 虚拟视图 | 描述 | 自 |
---|---|---|---|
UINavigationBar | titleStyle | 设置标题导航栏样式 | 0.4 |
只需调用 NSAttributedString(string:"Hello", style: yourStyle)
即可得到一个带有样式的 NSAttributedString
。
或者您可以使用 style.textAttributes
将 StyleRule
转换为任何与 NSAttributedString
兼容的字典。
Theme
将多个 Style
定义组合在一起,形成一个完整的集合。
public class SampleTheme : Theme {
/// Non static is important if you want to reference them from InterfaceBuilder
lazy let logo = Style(...)
lazy let title = Style(...)
}
class CustomView: UIView {
typealias ThemeType = RailTheme
@IBOutlet weak var title: UILabel!
@IBOutlet weak var footnote: UILabel!
@IBOutlet weak var logo: UIImageView!
@IBOutlet weak var button: UIButton!
override func awakeFromNib() {
self.title.styleClass = SampleTheme().logo
self.logo.styleClass = SampleTheme().title
}
}
您还可以直接从 InterfaceBuilder 应用主题。
您可以扩展样式以重用通用功能。
func primary() -> Style {
return [
.Color: UIColor.greenColor()
]
}
func large() -> Style {
return [
.Font: UIFont.systemFontOfSize(18)
]
}
func merged() -> Style {
return Style().extends(primary(), large())
// color: green, font: 18
}
您可以定义状态样式。它们将从默认状态扩展。
func style() -> Style {
return Style() { (inout style: StyleRule) -> Void in
style.tintColor = UIColor.whiteColor()
}
.state(.Selected, attributes: [
.TintColor: UIColor.grayColor().colorWithAlphaComponent(0.6)
]
}
不要犹豫,查看样例以更好地了解其工作原理。
该项目最初由法国巴黎的Xebia IT Architects开发。我们将继续为其投入精力和资金。
我们鼓励社区通过开票和/或拉取请求来为项目做出贡献。以下是我们感兴趣的一些主题
Gaikan遵循MIT许可证发布。请查阅LICENSE文件获取详细信息。