我对iOS开发相对较新,我来自UIUX设计背景。我想知道在Sketch或任何其他主流设计工具的方式下定义文本样式是否有更有效的方法或最佳实践。
示例场景,我有很多带有UIlabels的屏幕,我希望所有标题文本都有一个通用的文本样式。然后,如果我想修改文本样式,我只在一个地方修改它,然后更改将反映在使用相同文本样式的所有UILabel上,就像在Sketch中一样。
我想到的一个解决方案是为UIlabel创建一个子类。但我不确定这是不是很好的做法。
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
使用appearance
概念设置全局主题,例如
UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .white
或直接申请你可以使用像
UILabel.appearance().textColor = .red
例如,您可以获得样本link,或者使用扩展名作为标签。
答案 1 :(得分:0)
您还可以使用@IBInspectable
的力量。
在您的子类中,添加如下属性:
@IBInspectable open var style : String = "" {
didSet {
switch style {
case "head":
font = //any font for head component
...
}
}
}
然后在您的Xib / Storyboard中(甚至在代码中),您可以在属性检查器中设置属性值
答案 2 :(得分:0)
我这样做的方式不同。只需创建一个TextConstants.swift,在其中放置所有与文本相关的常量,然后在代码中引用特定的常量。
示例:
以下代码位于TextConstants.swift文件中。
struct FontsAndSizes {
static let System_20_Regular = UIFont.systemFont(ofSize: 20, weight: .regular)
}
struct AttributedText {
static let ModuleViewHeader = [
NSAttributedStringKey.font: UIFont.systemFont(ofSize: 28, weight: .bold),
NSAttributedStringKey.foregroundColor: Colors.GreyTextDark] as [NSAttributedStringKey : Any]
}
然后在代码中引用上述常量。
示例:
sectionLabel.attributedText = NSAttributedString(string: module.name, attributes: AttributedText.ModuleViewHeader)
或
sectionLabel.font = FontsAndSizes.System_20_Regular
我发现这种方法非常方便,因为
此外,您在Swift中看不到多少underscore_case
命名。但我发现它们在这种特殊情况下很有用,因为当你有许多不同的字体和样式时,它们会更好地区分。
答案 3 :(得分:0)
子类或使用@IBInspectable
是最简单的方法。
另一个是使用本地或从后端下载的json
文件中的这些控件的定义。这样,您可以通过修改json
文件来轻松配置和更改样式。