Tag: 动态类型

带有TypographyKit的iOS中的动态类型

动态类型是iOS 7中引入的功能,允许用户更改跨iOS使用的默认字体大小。 它主要用于支持视觉障碍的用户,但实际上,出于各种原因,许多iOS用户只是更喜欢较小/较大的阅读尺寸。 可以从“显示和亮度”->“文本大小”中的“设置”应用程序更新,也可以从“常规”->“辅助功能”->“大文本”中更新设置。 如果使用前一种设置,则只有七个字体大小可供选择,而在后一部分中,有一个“较大的可访问性大小”开关,如果启用,则允许用户从另外五个较大的字体大小中进行选择。 没有开发人员的额外努力,App Store中的应用程序不会自动支持动态类型(与Android不同)。 在iOS 7中,Apple提供了六个UIFontTextStyles,即为屏幕上的每个标签分配一个文本样式,例如标题文本或正文文本,这将使应用程序开发人员可以按如下方式检索该文本样式的首选字体: UIFont.preferredFont(forTextStyle:.body) 当用户调整“设置”应用中的字体大小滑块时,此方法返回的字体的磅值会相应更新。 在iOS 7时代,实现动态类型具有挑战性,因为要求应用程序开发人员将每个显示文本的UIKit元素分类为可用的UIFontTextStyle类别之一,以便检索该类别的首选字体。 此外,返回的首选字体将是系统字体,即Helvetica Neue Light(在9之前的iOS版本上;在iOS 9及更高版本中默认为旧金山),这意味着开发人员在支持动态类型时无法使用自定义字体(更多信息请参见稍后)。 由于这些原因,App Store中的应用程序通常不支持动态类型。 如果用户在“设置”应用程序中更新了字体大小首选项,则已经打开且支持动态类型的应用程序通常直到用户关闭并重新启动后才会更新(取决于对UIFont.preferredFont(forTextStyle: )。 每次用户使用“设置”应用程序中的滑块更新“动态类型”首选项时,都会更新属性UIApplication.shared.preferredContentSizeCategory的值,并返回新的UIContentSizeCategory值,即滑块上的每个槽口都对应一个UIContentSizeCategory值。 为了更新应用程序的字体大小而不必关闭并重新打开应用程序,开发人员可以使用NotificationCenter观察(UIContentSizeCategory)didChangeNotification,然后调用UIFont.preferredFont(forTextStyle :),该字体将返回具有更新大小的字体每个UIKit元素都会在屏幕上显示文本。 实际上,在每个UIViewController中观察此通知并以编程方式在屏幕上更新每个文本UIKit元素通常会导致UIViewController Controller肿,其中包含许多其他代码来支持动态类型。 出于上述原因,创建了TypographyKit。 TypographyKit允许应用程序使用自定义字体,同时支持来自iOS 9+的Dynamic Type,而无需大量额外代码。 如果使用Cocoapods,可以通过将以下行添加到项目Podfile中,然后运行“ pod install”命令来将TypographyKit合并到您的Xcode项目中: pod “TypographyKit” 对于那些使用迦太基的人,可以通过在项目的Cartfile中添加以下行,运行“迦太基更新–平台iOS”来构建框架,然后手动为相关Xcode项目目标链接构建框架,从而安装TypographyKit: github “rwbutler/TypographyKit” 下一步是将TypographyKit配置文件添加到您的项目中(请确保将其添加到“副本捆绑资源”构建阶段)。 该文件可以采用属性列表或JSON格式,并分别命名为TypographyKit.plist或TypographyKit.json。 TypographyKit配置指定在应用程序中使用的印刷样式(即UIFontTextStyles)以及每种样式的外观。 它还指定字体应如何随着UIContentSizeCategory的更改而缩放: { “ typography-colors”:{ “ background”:“较淡的宝蓝色”, “ gold”:“#FFAB01”, “宝蓝色”:“#08224C”, “ text”:“ gold” }, “印刷工具包”:{ […]