一个 view modifier 作用在某个 View 上,并生成原来值的另一个版本。按照这个定义,大致来说,view modifier 分为两种类别:
- 像是 font,foregroundColor 这样定义在具体类型 (比如 Text) 上,然后返回同样类型 (Text) 的原地 modifier。
- 像是 padding,background 这样定义在 View extension 中,将原来的 View 进行包装并返回新的 View 的封装类 modifier。
原地 modifier 一般来说对顺序不敏感,对布局也不关心,它们更像是针对对象 View 本身的属性的修改。而与之相反,封装类的 modifier 的顺序十分重要。
常用的 Modifier
font
.font(.system(size: 38))
将文本字体设置为 Font.title。除了 .title 以外,SwiftUI 还预定义了一系列字体,比如 .headline,.body 等。你可以在 Apple 提供的人机交互指南 (HIG) 的排版页面中找到每种预定义字体所对应的具体大小。如果你想要具体按数值指定字号的话,可以使用 .font(.system(size: 48)) 的方式;除了系统提供的字体,你也可以通过指定名字,来使用自定义字体:.font(.custom("Copperplate", size: 48))。”
foregroundColor
.foregroundColor(.white) 设置view的前景色 使用 foregroundColor 设定文本的颜色。除了像是 Color.white 或者 Color.red 这样的系统颜色,你也可以使用 Color(_:red:green:blue:) 以提供色彩空间和 RGB 值来设置颜色。为了更方便颜色的管理,Color 还提供了一个以颜色名字字符串从 Assets.xcassets 中加载颜色的方法
padding
padding 将把当前的 View 包裹在一个新的 View 里,并在四周填充空白部分。在上面例子中,我们没有给定参数,这会在文本的四周都填上系统默认尺寸的空白。我们可以为 padding 指定需要填充的方向以及大小,比如:.padding(.top, 16) 将在上方填充 16 point 的空白,.padding(.horizontal, 8) 在水平方向 (也即 [.leading, .trailing]) 填充 8 point
background
background 为文本指定背景。这个方法接受的参数只需要满足 View,也就是说,除了像例子中设定一个 Color 以外 (Color 也是一个遵守 View 协议的类型),你也可以将任意的 View 作为背景元素进行设置 .background(Color("operatorBackground"))
frame
来定义某个 View 的尺寸
.frame(width: 88, height: 88)
cornerRadius
cornerRadius 是另一个非常常用的 modifier,它通过包装的方式为 View 添加圆角,并返回新的 View
cornerRadius(44)
scaleEffect 进行缩放
resizable
aspectRatio 让图片能够保持原始比例
创建自定义 View Modifier
ViewModifier 是 SwiftUI 提供的一个协议,它只有一个要求实现的方法:
public protocol ViewModifier {
func body(content: Self.Content) -> Self.Body
}
实现一个队button的修饰符
struct ToolButtonModifier: ViewModifier {
func body(content: Content) -> some View {
content
.font(.system(size: 25))
.foregroundColor(.white)
.frame(width: 30, height: 30)
}
}