一种简单的方法,通过 Swift 从 Interface Builder 设置任何 UIResponder
的自定义样式。
如果您需要此库的 Objective-C 版本,请查找 MGEStyles。
作为一名 iOS 开发者,我常常感到在 Xcode Interface Builder 中设置视图的一致样式是多么困难。如果您认为UILabel
,您可以对一组在不同的UIViewController
中使用的标签应用相同的样式(字体、颜色和大小)。如果在设计发生变化后,您必须逐个更改这些标签的属性,这是一件繁琐的工作。我通过开发 瓜亚
来尝试解决这个问题。这个受安卓 styles 系统启发的库简化了这个任务,让您有机会在一个地方定义完全自定义的样式,并在整个项目中使用它,无论是通过 Interface Builder 还是通过代码。
瓜亚提供两种版本,分别是 默认 和 轻量。唯一的区别是默认版本在 Interface Builder 中添加了一个可检验的属性,而轻量版本没有。更多详情请参阅应用样式部分。
克隆或下载项目,并将 瓜亚 文件夹的内容复制到您的项目中。然后,如果您更喜欢轻量版本,可以删除 inspectable 文件夹。
该库在 3 个步骤中工作
1 - 您必须创建所需的样式
2 - 您必须注册您想要在应用程序中使用的所有样式。
3 - 在界面构建器中或在代码中将这些样式应用于您的 UIResponder
。
在这个库中,样式是Style
对象。每个样式都将有一个配置块,它会告诉库如何处理UIResponder
。例如,如果您想为UILabels
创建一个样式,您将这样做
let baseStyle = Style<UILabel> { (label) in
label.font = .boldSystemFont(ofSize: 50)
label.numberOfLines = 0
}
Goya
允许继承。当一个Style
有父级时,该父级的配置块将在自己的块之前执行。例如,我们可以使用此方法为之前创建一个子样式
let titleStyle = Style<UILabel>(parent: baseStyle) { (label) in
label.textColor = .red
label.textAlignment = .Center
}
注册一个Style
非常简单。您只需调用以下方法
public func register(name: String)
例如,如果您想注册定义的titleStyle,我们将这样做
titleStyle.register("style")
样式应在应用程序启动时注册,因此application:didFinishLaunchingWithOptions:
可能是一个很好的地方来做这件事。无论如何,为了使AppDelegate尽可能简洁,创建一个辅助类以创建和注册所有样式,并从AppDelegate调用此类,强烈推荐。
最后一步是应用样式。有两种方法可以做到这一点
当您使用默认版本时,在界面构建器中的属性检查器中出现了一个新的属性。它名为Style Name。在这里,您应提供要应用注册样式的键
如果您使用的是轻量版本或Xcode的版本不支持IBInspectables,您可以通过在用户定义的运行时属性部分添加一个新的属性来实现相同的结果。名称必须是gy_styleName,类型必须是字符串,值必须是已注册样式的键
Goya
提供了一个类别,允许将样式应用于任何UIResponder
。如果您想将注册的style应用于一个标签,您可以通过以下代码实现
let label = UILabel()
label.gy_styleName = "style"
您还可以应用未注册的样式
let label = UILabel()
let titleStyle = Style<UILabel>(parent: baseStyle) { (label) in
label.textColor = .red
label.textAlignment = .Center
}
label.gy_style = titleStyle
Goya在MIT许可下提供。请参阅LICENSE。