我正在使用 Swift 构建一个 iOS 应用程序。 在每个应用程序页面上,我们都有用于不同目的的文本标签。 例如,标题的文本标签、描述的文本标签。我们需要针对每个目的类别统一文本的外观。
我可以在界面生成器中统一它们的外观,比如对于所有文本标题,将字体系列设置为“Helvetica Nueue”,将字体大小设置为“15”。但是,当我们的设计人员更改字体系列和大小时,我们必须手动修改每个标签设置,效率非常低。
解决此问题的直接方法是,在实用程序类中将字体系列和大小定义为常量,然后在后台代码中,在加载应用页面后设置所有文本样式。在这种情况下,当有任何变化时,我们只需要更新实用程序类中的常量即可。然而,这也需要我们从界面构建器中为我们的代码中的每个文本标签添加引用,这也需要大量的工作,而且效率不够。
有没有更好的想法来巧妙而高效地做到这一点? 感谢您的建议!
最佳答案
这是一个想法:
- 为每个不同的 label/textfield/textview/... 样式定义一组
UIView
tag
值。 - 然后在 Interface Builder 中将 UI labels/textfields/textviews/... 设置为近似样式,以便您可以很好地了解事物的外观和大小。而且还设置
tag
值与定义的适当样式相匹配。 - 与设计师坐下来定义 future 验证粒度。我的意思是,两个标签现在可能具有相同的样式,但(或可能在可预见的 future )实际上被设计师认为是不同的;所以使用相同的样式可能只是“巧合”。
- 随后创建一个模块来定义这些样式。
- 在该模块中创建一个遍历 View 层次结构的方法,并根据您分配的
tag
值设置适当的样式。 - 如果您想为不同的 UI 元素类型(例如
UILabel
、UITextField
和UIButton
)设置样式,很可能只需使用不同的tag
每种类型的范围,因为它们很有可能在某些时候被设计师认为是不同的。 - 在您的代码中,您所要做的就是为您拥有的每个顶级 View 调用上述方法,例如
viewWillAppear
,...取决于您是否正在处理 View Controller 、 TableView 单元格、自定义 View 、...
我希望这对您有所帮助,或者它能为您指明方向,从而找到适合您的需求和偏好的解决方案。
其他想法:
- 为每个可预见的标签样式创建一个子类,您可以在其中设置所需的所有属性。
- 在 Interdace Builder 中,将 UI 元素的类型更改为其相应子类的类型。
或者,一个组合:
- 为您需要设置样式的每种 UI 元素类型创建一个子类。
- 在 IB 中更改上述类型。
- 在 IB 中设置
标签
来选择特定的样式。 - 这使您不必拥有“许多”仅用于保存和设置一种样式的子类。
- 这会将所有样式(每个 UI 元素类型)保存在一个文件中,这非常适合比较和更新。
关于iOS:如何高效统一不同应用页面的字体系列和大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840546/