【问题标题】:Best practices for styling an iOS app为 iOS 应用设置样式的最佳实践
【发布时间】:2017-09-05 05:37:19
【问题描述】:

假设我想为我的应用使用不同的字体、不同的字体大小和不同的配色方案,假设我想使用 Interface Builder。

我希望能够在一个地方设置所有这些样式,而不是说去界面生成器上的每个标签并更改其字体、颜色等。

实现这一目标的最常见方法是什么?

我知道你可以在代码中设置这些东西,但是我在 Interface Builder 中看不到变化?

我对这一切都很陌生,来自 Web 开发背景,我可能会试图将我以前的知识强加于这方面,但必须一一更改这些是维护的噩梦,我可以'似乎找不到任何简单的方法来直接在 Interface Builder 中创建自定义样式。

我能想到的唯一方法是将这些视图中的每一个子类化,例如标签、按钮等,为每个视图创建 XIB,并将它们设为@IBDesignable。这是要走的路吗?感觉这只是一些不必要的工作,对于一些简单的事情。

【问题讨论】:

  • 看看 UIAppearance,因为这可能会对你有所帮助。这是一个很好的入门教程:raywenderlich.com/108766/uiappearance-tutorial。我提供了这个问题的答案作为替代方案,您可以在代码中设置样式 - 但是您需要使用 IBDesignable:stackoverflow.com/questions/35501816/…
  • @totiG,谢谢!我看过那个教程,但是当我在 UIAppearance 中进行这些更改时,IB 会自动更新吗?
  • 创建自定义样式的组件,使其可设计并在 IB 中使用。使用具有逻辑名称的颜色和字体常量声明您的主题,例如borderColor,而不是darkGreenColor。尽可能使用颜色资源。

标签: ios swift xcode interface-builder


【解决方案1】:

Apple 提供的全局样式化应用程序的方法是通过UIAppearance API:https://developer.apple.com/documentation/uikit/uiappearance

这确实具有不需要您在多个实例(例如 UILabel)上一遍又一遍地设置相同属性的优点。但是,它不允许您在 Interface Builder 中预览样式(如您所愿),并且当您有多种方式可能想要根据它们在应用程序。

如您所述,在 Storyboard 上预览 UIView 样式或属性更改的唯一方法是使用 @IBDesignable。它肯定需要一些工作来设置,甚至更多的工作才能将其与命名样式和应用程序样式表的概念联系起来。

我自己也经历过这个,我创建了一个框架,可以在任何应用程序中使用 Swift 或 JSON 样式表来定义样式和样式表,然后在设计时在故事板上实时查看这些样式.它提供了已经创建的 UIView、UIButton、UILabel、UIImageView、UITextField 和 UITextView 的 @IBDesignable 子类以及通过样式表设置所有属性样式的钩子;您也可以随时扩展它以设置其他类型的组件的样式。您可能会发现直接使用或作为示例实现很有帮助,以了解如何通过 Interface Builder 按照您描述的方式使用 @IBDesignable 进行样式设置:https://github.com/daniel-hall/Stylish

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    相关资源
    最近更新 更多