HandyText
目的
HandyText 是一个助手库,允许以明确声明方式创建和管理文本样式。
解决的问题
在涉及定义文本外观的 UI 任务中,工作充满了重复。您必须始终参照原型图,或者搜索并复制具有相同外观的元素。这两种方法都留下了许多错误,并且的做法都将设计中的后期更改变得非常痛苦。更改典型元素中字体的工作量与项目的大小成比例。
支持的操作系统和 SDK 版本
Swift 5.0
- 支持的构建目标 - iOS 10.1 及更高版本(Xcode 10)
安装
# In your Podfile
pod 'HandyText'
将自定义文本样式声明为 TextStyle 类的静态函数或属性。
版本 1.4.5
- 发布版本。
用法
首先,让我们定义一些文本样式
extension TextStyle {
static var plainText: TextStyle {
return TextStyle(font: .avenir)
}
}
对于创建全新的样式,字体是必需的参数,其他所有参数均默认设置。该库建议使用更为声明的 '层叠' 样式来替代复制实例并修改属性的常规做法。假设你需要基于普通文本的标题样式
static var header1: TextStyle {
return plainText.withSizeMultiplied(by: 1.4).uppercase().bold()
}
值得注意的是样式是可以链式调用的,换句话说,是基于彼此的。将基础样式字体更改为 .georgia 使得所有的样式方案看起来都不同,但仍然非常适合。
格式化字符串
使用文本样式的代价是切换到受大多数 UIKit 类支持的格式化文本。
label.attributedText = "Hello, World!".withStyle(.plainText)
合并格式化字符串
可以通过合并格式化字符串来达成更复杂的文本外观
let title = "First name: ".withStyle(.placeholder)
let name = "Michael".withStyle(.plainText)
label.attributedText = title + name
高亮单词
可以使用不同的文本样式来高亮特定的子字符串
let text = "There are three species of zebras: the plains zebra, the Grévy's zebra and the mountain zebra"
label.attributedText = text.withStyle(.plainText).applyStyle(.header1, toOccurencesOf: "zebra")
要显示带有标签的字符串,你可以定义一个标签方案
let scheme = TagScheme()
scheme.forTag("b") { $0.bold() }
scheme.forTag("i") { $0.italic() }
在每个自定义标签的方案中,你可以注册一个块来定义初始文本样式的修改。支持嵌套标签。以下标记的内容将被标注为 "<i><b>lions</b></i>"
会被设置为粗体斜体。要将字符串转换成格式化字符串
let result = "about <i>zebras</i>".withStyle(.plainText, tagScheme: scheme)
常见问题解答(FAQ)
需要多少种样式?
尽可能少。平均应用有2-3种基本文本样式和几种辅助文本样式。如果样式仅颜色或对齐方式有所不同,则不需要创建新的样式。最好是原地扩展样式。
绝对尺寸或相对尺寸?
您习惯使用点来定义文本尺寸:普通文本10点,标题15点等。但让我们从另一个角度来看:这些数字代表什么?我想设计师可能认为“让标题是普通文本的一半大”。通过使用方法withSizeMultiplied(by:)
,您可以按比例定义文本尺寸。在这种情况下,当基本样式的尺寸改变时,整个文本方案会按比例缩放。基线偏移也可以定义为相对,这样可以保持以下自定义上标等比例
什么可以改变文本的尺寸?
这里有一些想法。通过在基本样式中使用动态文本大小,您将使您的应用对设备的无障碍性首选项敏感。对于大设备,可以使用略大一些的字体。一些应用允许用户更改外观主题。使用HandyText更新字体变得轻而易举。
组件太多!
要有效地使用 HandyText,必须为包含文本的每个视图创建一个出口。这有什么不好吗?在设计良好的项目中,所有字符串都保存在单个文件中:Localizable.strings。不在故事板中,也不在代码中。这种方法可以在不更改一行代码的情况下将整个应用程序翻译成新的语言。HandyText 库鼓励您使用这种方法:获取本地化字符串,应用样式,在相应的出口中显示结果。
如何将链接添加到我的富文本中?
该库不会给 UIKit 类添加任何新功能。要为文本块分配链接,它使用 NSLinkAttributeName。有关更多信息,请参阅官方文档。
如何调用我的文本样式?
避免根据特定使用情况命名,尽量使其更通用。例如,“screenHeading”是一个好的名字,“orangeHeaderInFriendsList”则不是。
HandyText能帮助我改进我的设计规范吗?
当然可以。作为开发者,您可以与设计团队合作,确定常见的文本样式和描述修饰符的规则表。与其“HelveticaNeue-Bold, 15 pt, color: FF0000”,不如“style: header, color: tomatoRed”。
许可证
The MIT License (MIT)
Copyright © 2016 Aleksey Chernish
Permission is hereby granted free of charge to any person obtaining a copy of this software and associated documentation files (the "Software") to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.