Gaikan 0.9.1

Gaikan 0.9.1

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2017年6月
SwiftSwift 版本3.0
SPM支持 SPM

pjechris维护。



Gaikan 0.9.1

  • pjechris 和 akane

Gaikan

Gaikan 使用在 Swift 中的声明式 DSL 提供强大的样式功能。灵感来自 React: CSS in JSCSS 模块

只需给 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

只需调用 NSAttributedString(string:"Hello", style: yourStyle) 即可得到一个带有样式的 NSAttributedString

或者您可以使用 style.textAttributesStyleRule 转换为任何与 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开发。我们将继续为其投入精力和资金。

我们鼓励社区通过开票和/或拉取请求来为项目做出贡献。以下是我们感兴趣的一些主题

  • 添加UIStackView属性(分配、间距等)。
  • 支持多个布局引擎(AutoLayout、LayoutKit、Flexbox等)。
  • 允许定义1+边框和圆角。目前定义边框和半径设置4个(上、下、左、右)。
  • 更好地支持IBDesignable(如果可能的话)。
  • 添加调试信息(样式名称、继承等)。
  • 与NSAttributedString更好的集成。
  • 支持特性。
  • 任何您想象得到的!

许可证

Gaikan遵循MIT许可证发布。请查阅LICENSE文件获取详细信息。