如何更改 SwiftUI 字体大小

在 SwiftUI 中为文本视图设置字体大小有两种方法。

  • 固定尺寸
  • 动态大小

什么是固定尺寸

无论用户偏好如何,固定字体大小都保持不变

如何设置固定字体大小

要设置固定字体大小,我们在创建字体时指定了我们想要的大小。我们可以为系统字体和自定义字体设置此项。

系统字体

我们使用方法创建系统字体Font.system(size:weight:design:)。这个方法让我们指定一个我们想要的固定字体大小。

下面是一个示例,我们将第二个文本的字体设置为 36 磅的固定大小。

VStack {
Text("Hello, world!")
Text("Hello, world!")
.font(.system(size: 36))
}
默认字体大小与 36 点的固定字体大小。
默认字体大小与 36 点的固定字体大小。

系统字体有多种变体供我们选择。您可能会注意到,该方法中有权设计参数Font.system(size:weight:design:)

您还可以设置粗细和设计以及字体大小。

这是一个针对不同粗细和设计的固定系统字体示例。

VStack {
Text("Hello, world!")
.font(.system(size: 36))
Text("Hello, world!")
.font(.system(size: 36, weight: .semibold))
Text("Hello, world!")
.font(.system(size: 36, weight: .bold, design: .monospaced))
Text("Hello, world!")
.font(.system(size: 36, weight: .heavy, design: .rounded))
Text("Hello, world!")
.font(.system(size: 36, weight: .black, design: .serif))
}
默认样式、半粗体、等宽设计的粗体、圆形设计的粗体和衬线设计的黑色体。
默认样式、半粗体、等宽设计的粗体、圆形设计的粗体和衬线设计的黑色体。

自定义字体

为自定义字体设置固定字体大小与系统字体没有什么不同。唯一不同的是我们改用Font.custom(_:fixedSize:)方法。

下面是一个示例,我们使用固定大小为 36 磅的“American Typewriter”字体。

Text("Hello, world!")
.font(.custom("AmericanTypewriter", fixedSize: 36))
American Typewriter 字体,固定大小为 36 磅。
American Typewriter 字体,固定大小为 36 磅。

请注意,我们在这里使用Font.custom(_:fixedSize:),而不是Font.custom(_:size:)您将在后面的部分中看到不同之处,我们将在其中探索自定义字体的动态大小

自定义字体可以有不同的 weight 和 design,所以我们不能像系统字体那样将其指定为方法参数。我们必须手动指定自定义变体的名称。

这是 American Typewriter 不同字体样式的示例。

VStack {
Text("Hello, world!")
.font(.custom("AmericanTypewriter", fixedSize: 36))
Text("Hello, world!")
.font(.custom("AmericanTypewriter-Semibold", fixedSize: 36))
Text("Hello, world!")
.font(.custom("AmericanTypewriter-Bold", fixedSize: 36))
Text("Hello, world!")
.font(.custom("AmericanTypewriter-Condensed", fixedSize: 36))
Text("Hello, world!")
.font(.custom("AmericanTypewriter-CondensedLight", fixedSize: 36))
}
American Typewriter 有常规、半粗体、粗体、浓缩和浓缩的浅色风格。
American Typewriter 有常规、半粗体、粗体、浓缩和浓缩的浅色风格。

什么是动态尺寸

动态字体大小是我们根据其用法(文本样式)而不是确切的点大小来描述文本大小的一种方式。

Apple 目前有 11 种文本样式。

  • 大标题
  • 标题 1
  • 标题 2
  • 标题 3
  • 标题
  • 身体
  • 大喊
  • 小标题
  • 脚注
  • 标题 1
  • 字幕 2

像这样定义大小的好处是适应性和可访问性。文本大小和粗细会自动响应粗体文本和更大字体等辅助功能。

下面是每个文本样式如何适应动态字体大小的示例。

文本样式根据用户偏好调整其大小。
文本样式根据用户偏好调整其大小。

将此与固定字体大小进行比较,后者始终保持不变。

固定字体大小不会改变。
固定字体大小不会改变。

如何设置动态字体大小

要设置动态字体大小,我们将文本样式或用途指定系统字体

系统字体

要为系统字体设置动态字体大小,我们使用Font.system(_:design:)方法创建它。

如您所见,尺寸和重量参数消失了,因为它们会根据用户偏好进行动态调整。

以下是大型动态字体大小(默认大小)上的五种文本样式的示例。

VStack {
Text("Large Title")
.font(.largeTitle)
Text("Title 1")
.font(.title)
Text("Title 2")
.font(.title2)
Text("Title 3")
.font(.title3)
Text("Body")
.font(.body)
}
大型动态字体大小的大标题、标题 1、标题 2、标题 3 和正文样式。
大型动态字体大小的大标题、标题 1、标题 2、标题 3 和正文样式。

这是 xxxLarge Dynamic Type 尺寸上的相同文本样式。

大标题、标题 1、标题 2、标题 3 和正文样式,采用 xxx 大型动态字体大小。
大标题、标题 1、标题 2、标题 3 和正文样式,采用 xxx 大型动态字体大小。

您可以从 Apple Human Interface Guideline中查看每种文本样式的字体大小和粗细。

自定义字体

动态调整字体外观不是一件容易的事。Apple 为我们做了繁重的工作,为系统字体每种文本样式定义字体大小、粗细和行距,以确保它根据用户偏好可读。

幸运的是,我们可以在自定义字体上使用其中的一些优势(字体缩放)

要使用与Apple 文本样式相同的比例因子制作自定义字体比例Font.custom(_:size:relativeTo:),我们使用方法。

这是一个示例,我使用与 Apple 文本样式相同大小的自定义字体并使用相同的比例因子

VStack {
Text("Large Title")
.font(.custom(
"AmericanTypewriter",
size: 34,
relativeTo: .largeTitle))
Text("Title 1")
.font(.custom(
"AmericanTypewriter",
size: 28,
relativeTo: .title))
Text("Title 2")
.font(.custom(
"AmericanTypewriter",
size: 22,
relativeTo: .title2))
Text("Title 3")
.font(.custom(
"AmericanTypewriter",
size: 20,
relativeTo: .title3))
Text("Body")
.font(.custom(
"AmericanTypewriter",
size: 17,
relativeTo: .body))
}

如您所见,它以与系统文本样式相同的速度缩放。

使用与系统字体具有相同字体大小和字体比例的自定义字体。
使用与系统字体具有相同字体大小和字体比例的自定义字体。

Font.custom( :size:) 与 Font.custom( :size:relativeTo:)

还有另一种你应该知道的自定义字体的方法,Font.custom(_:size:).

该方法等同于Font.custom(_:size:relativeTo:)参数relativeTo设置为.body文本样式

下面是一个使用Font.custom(_:size:)withFont.custom(_:size:relativeTo:)和 的例子Font.custom(_:fixedSize:)

VStack {
Text("Hello, world!")
.font(.custom(
"AmericanTypewriter",
size: 17,
relativeTo: .body))
Text("Hello, world!")
.font(.custom(
"AmericanTypewriter",
size: 17))
Text("Hello, world!")
.font(.custom(
"AmericanTypewriter",
fixedSize: 17))
}

它在大动态字体大小上看起来是一样的。

Font.custom(_:size:)、Font.custom(_:size:relativeTo:) 和 Font.custom(_:fixedSize:) 在大型动态字体大小上。
Font.custom(_:size:)、Font.custom(_:size:relativeTo:) 和 Font.custom(_:fixedSize:) 在大型动态字体大小上。

但是当我们将大小更改为 xxx large 时,Font.custom(_:fixedSize:)保持不变,而其他两个适应相同的比例因子。

Font.custom(_:size:)、Font.custom(_:size:relativeTo:) 和 Font.custom(_:fixedSize:) 在 xxx 大型动态字体大小上。
Font.custom(_:size:)、Font.custom(_:size:relativeTo:) 和 Font.custom(_:fixedSize:) 在 xxx 大型动态字体大小上。
庄朋龙
庄朋龙

一个爱生活的技术菜鸟

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注