排序
Widget 的 Container Background
Widget 的 Container Background(容器背景) 是在 iOS 17 中引入的。在 Widget 的开发过程中,可能会在预览中遇到如下的错误 Widget needs to adopt container background. 容器背景用途 iOS 1...
动画(四) – 过渡
以视图的插⼊和移除来设定动画,SwiftUI 将这些动画称为 过渡 (transition) 。 当我们使⽤动画来改变那些会导致视图插⼊或者移除的状态时,SwiftUI 会添加⼀个默认的 .opacity 过渡效果。 struc...
动画(一) – 属性动画
在 SwiftUI 中,修改状态是唯⼀能触发视图更新的⼿段。默认情况下,旧视图树与新视图树之间的更改不会进⾏动画处理。 对那些在视图树中已经存在,且在状态变化前后属性也相应改变的视图,属性动...
动画(三) – 动画协议
SwiftUI 属性动画系统的核⼼是 Animatable 协议。这个协议可以被视图和视图修饰符所实现,它们通过该协议把可以进⾏动画的属性暴露给SwiftUI。 这个协议唯⼀的要求是⼀个 animatableData 属性,...
动画(二) – 控制动画
在 SwiftUI 中,有多种⽅式可以指定动画发⽣地时机 当某个特定的值改变时,触发隐式动画。 当某个特性事件发⽣时,触发显示动画。 动画类型 隐式动画 要指定隐式动画,可以在视图树的任意位置使...
布局(六) – Layout 协议
Layout 协议,可以创建⾃定义的容器视图,让它们根据所编写的算法来布局⼦视图。这个协议的使用分为两步:⾸先,使⽤ sizeThatFits ⽅法确定容器的尺⼨。在该⽅法内部,我们通过⼦视图的代理,来...
布局(七) – 基于首选项的布局
几何读取器使⽤⼏何读取器 (GeometryReader),我们可以测量被建议的尺⼨。⼏何读取器⽆条件接受被建议尺⼨,并通过⼀个⼏何代理 (GeometryProxy) 将该尺⼨报告给它的视图构建器闭包。通过⼏何代...
布局(四) – 容器视图
HStack 和 VStack⽔平和竖直堆栈在布局⼦视图时采⽤的⽅法相同,只是对应的轴不⼀样。以 HStack 为例。HStack(spacing: 0) { Color.cyan Text('Hello, World!') Color.teal } 如果我们提供⼀个...
布局(八) – 坐标空间
Framework 为我们提供两种内置的坐标空间: 全局坐标空间 和 本地坐标空间,我们也可以定义⾃⼰的坐标空间。struct ContentView: View { var body: some View { VStack { Text('Hello') Text('Se...
布局(五) – 对齐
默认情况下,⼏乎所有的视图都会把⼦视图居中对⻬。Text('Hello') .frame(width: 100, height: 100) frame 修饰器拥有⼀个默认值为 .center 的 alignment 参数。这 100⨉100 的区域中,⽂本将被...