iOS16 中的 3 种新字体宽度样式

news/2024/7/20 22:51:59 标签: swift, 开发语言, ios

前言

在 iOS 16 中,Apple 引入了三种新的宽度样式字体到 SF 字体库。

  1. Compressed

  2. Condensed

  3. Expend

UIFont.Width

Apple 引入了新的结构体 UIFont.Width,这代表了一种新的宽度样式。

目前已有的四种样式。

  • standard:我们总是使用的默认宽度。

  • compressed:最窄的宽度样式。

  • condensed:介于压缩和标准之间的宽度样式。

  • expanded:最宽的宽度样式。

SF 字体和新的宽度样式

如何将 SF 字体和新的宽度样式一起使用

为了使用新的宽度样式,Apple 有一个新的 UIFont 的类方法来接收新的 UIFont.Width

swift">class UIFont : NSObject {
    class func systemFont(
        ofSize fontSize: CGFloat,
        weight: UIFont.Weight,
        width: UIFont.Width
    ) -> UIFont
}

你可以像平常创建字体那样来使用新的方法。

swift">let condensed = UIFont.systemFont(ofSize: 46, weight: .bold, width: .condensed)
let compressed = UIFont.systemFont(ofSize: 46, weight: .bold, width: .compressed)
let standard = UIFont.systemFont(ofSize: 46, weight: .bold, width: .standard)
let expanded = UIFont.systemFont(ofSize: 46, weight: .bold, width: .expanded)

SwiftUI

更新:在 Xcode 14.1 中,SwiftUI 提供了两个新的 API 设置这种新的宽度样式。
width(_:)fontWidth(_:)

目前(Xcode 16 beta 6),这种新的宽度样式和初始值设定只能在 UIKit 中使用,幸运的是,我们可以在 SwiftUI 中轻松的使用它。

有很多种方法可以将 UIKit 集成到 SwiftUI 。我将会展示在 SwiftUI 中使用新宽度样式的两种方法。

  1. 将 UIfont 转为 Font。
  2. 创建 Font 扩展。

将 UIfont 转为 Font

我们从 在 SwiftUI 中如何将 UIFont 转换为 Font 中了解到,Font 有初始化方法可以接收 UIFont 作为参数。

步骤如下

  1. 你需要创建一个带有新宽度样式的 UIFont。
  2. 使用该 UIFont 创建一个 Font 。
  3. 然后像普通 Font 一样使用它们。
swift">struct NewFontExample: View {
    // 1
    let condensed = UIFont.systemFont(ofSize: 46, weight: .bold, width: .condensed)
    let compressed = UIFont.systemFont(ofSize: 46, weight: .bold, width: .compressed)
    let standard = UIFont.systemFont(ofSize: 46, weight: .bold, width: .standard)
    let expanded = UIFont.systemFont(ofSize: 46, weight: .bold, width: .expanded)
    
    var body: some View {
        VStack {
            // 2
            Text("Compressed")
                .font(Font(compressed))
            Text("Condensed")
                .font(Font(condensed))
            Text("Standard")
                .font(Font(standard))
            Text("Expanded")
                .font(Font(expanded))
        }
    }
}
  • 创建带有新宽度样式的 UIFont。
  • 用 UIFont 初始化 Font, 然后传递给 .font 修改。

创建一个 Font 扩展

这种方法实际上和将 UIfont 转为 Font 是同一种方法。我们只需要创建一个新的 Font 扩展在 SwiftUI 中使用起来更容易一些。

swift">extension Font {
    public static func system(
        size: CGFloat,
        weight: UIFont.Weight,
        width: UIFont.Width) -> Font
    {
        // 1
        return Font(
            UIFont.systemFont(
                ofSize: size,
                weight: weight,
                width: width)
        )
    }
}

创建一个静态函数传递 UIFont 需要的参数。然后,初始化 UIFont 和创建 Font

我们就可以像这样使用了。

swift">Text("Compressed")
    .font(.system(size: 46, weight: .bold, width: .compressed))
Text("Condensed")
    .font(.system(size: 46, weight: .bold, width: .condensed))
Text("Standard")
    .font(.system(size: 46, weight: .bold, width: .standard))
Text("Expanded")
    .font(.system(size: 46, weight: .bold, width: .expanded))

如何使用新的宽度样式

你可以在你想使用的任何地方使用。不会有任何限制,所有的新宽度都有一样的尺寸,同样的高度,只会有宽度的变化。

这里是拥有同样文本,同样字体大小和同样字体样式的不同字体宽度样式展示。

新的宽度样式优点

你可以使用新的宽度样式在已经存在的字体样式上,比如 thin 或者 bold ,在你的 app 上创造出独一无二的体验。

Apple 将它使用在他们的照片app ,在 "回忆’’ 功能中,通过组合不同的字体宽度和样式在标题或者子标题上。

这里有一些不同宽度和样式的字体组合,希望可以激发你的灵感。

swift">Text("Pet Friends")
    .font(Font(UIFont.systemFont(ofSize: 46, weight: .light, width: .expanded)))
Text("OVER THE YEARS")
    .font(Font(UIFont.systemFont(ofSize: 30, weight: .thin, width: .compressed)))

Text("Pet Friends")
    .font(Font(UIFont.systemFont(ofSize: 46, weight: .black, width: .condensed)))
Text("OVER THE YEARS")
    .font(Font(UIFont.systemFont(ofSize: 20, weight: .light, width: .expanded)))

你也可以用新的宽度样式来控制文本的可读性。

下面的这个例子,说明不同宽度样式如何影响每行的字符数和段落长度

下载这种字体

你可以在 Apple 字体平台 来下载这种新的字体宽度样式。

下载安装后,你将会发现一种结合了现有宽度和新宽度样式的新样式。

基本上,除了在模拟器的模拟系统 UI 中,在任何地方都被禁止使用 SF 字体。请确保你在使用前阅读并理解许可证。


http://www.niftyadmin.cn/n/10829.html

相关文章

南卡电容笔和绿联哪款更好用?性价比高的电容笔推荐

随着生活节奏逐渐加快,从而Apple Pencil的出现引来了不少热度,不过Apple Pencil由于价格昂贵,让不少用户望而止步。然而现在出现了平替电容笔,而且品牌众多,有很多百元左右的平替电容笔,性能和配置都做的不…

【项目实战:核酸检测平台】第二章 大卸八块

本章目标 完成项目架构设计和数据库结构设计 重点:全是重点 文章目录本章目标总体设计(架构设计)技术选型部署结构设计工程文档结构设计第一步:项目和模块命名第二步:约定项目工程文件内容第三步:设计文档…

python 隔一个取一个 取出奇数索引元素 取出偶数索引元素

这个实现的方法有很多种,但是我想简单一点,即省事还优雅。 取出偶数索引元素 只需要调整步长即可。 lis lis[::2]取出基数索引元素 这个一开始却是没想到,还去Google了一下,没有满意的答案,但是被我想到了&#xff…

一文玩转Java 泛型知识

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:前端开发者…

云原生技术中台 CNStack2.0 正式发布

作者:奥陌 11 月 5 日,在 2022 杭州 云栖大会上,云原生技术中台 CNStack2.0 正式发布。 阿里巴巴资深技术专家 谢吉宝介绍 CNStack2.0 企业在数字化转型的过程中,一部分问题得到了解决,但随着 IT 水平的不断提升&am…

Android程序设计之学生考勤管理系统

基于安卓平台开发的学生考勤管理系统,本系统采用java语言设计,数据存储使用SQLite轻量级数据库实现 SQLite 简介 SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎&…

超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)

文章目录1.项目部署规划2.前置工作2.1修改后端配置文件ip2.2修改前端Vue项目运行端口2.3修改前端对应的服务器ip2.4后端项目打包2.4.1解决打包问题2.4.2项目打包,本地运行jar包测试2.5前端项目打包2.6开放端口2.7配置安全组规则3.Docker安装4.拉取镜像5.编写Dockerf…

云计算-Hadoop-2.7.7 最小化集群的搭建(3台)

云计算-Hadoop-2.7.7 最小化集群的搭建(3台) 文章目录云计算-Hadoop-2.7.7 最小化集群的搭建(3台)一、环境依赖下载二、部署概要三、hadoop101模板机配置1. 更新 & 升级2. 安装好用的vim VimForCpp3. 安装必要依赖4. 关闭防火…