排序
动画(四) – 过渡
以视图的插⼊和移除来设定动画,SwiftUI 将这些动画称为 过渡 (transition) 。 当我们使⽤动画来改变那些会导致视图插⼊或者移除的状态时,SwiftUI 会添加⼀个默认的 .opacity 过渡效果。 struc...
布局(五) – 对齐
默认情况下,⼏乎所有的视图都会把⼦视图居中对⻬。Text('Hello') .frame(width: 100, height: 100) frame 修饰器拥有⼀个默认值为 .center 的 alignment 参数。这 100⨉100 的区域中,⽂本将被...
布局(一) – 布局算法
布局的具体算法描述如下:父视图向子视图提供一个建议尺寸。⼦视图基于这个建议尺⼨决定⾃⼰的尺⼨,如果这个⼦视图还有⾃⼰的⼦视图,从步骤 1 开始递归。⼦视图将它的尺⼨报告给⽗视图。⽗视图...
布局(二) – 叶子视图
叶子视图 这里是指没有子视图的视图。Text默认情况下,Text 视图会去适应任意的建议尺⼨,设法让⾃⼰适配 (不超过) 这个尺⼨。Text 使用的策略顺序如下:将⽂本分成多⾏ (英⽂内容按单词换⾏)单...
布局(七) – 基于首选项的布局
几何读取器使⽤⼏何读取器 (GeometryReader),我们可以测量被建议的尺⼨。⼏何读取器⽆条件接受被建议尺⼨,并通过⼀个⼏何代理 (GeometryProxy) 将该尺⼨报告给它的视图构建器闭包。通过⼏何代...
布局(三) – 视图修饰符
视图修饰符总是把已经存在的视图包装到另⼀层中去:修饰符会变为它所作⽤的视图的⽗视图。Padding.padding 修饰符使⽤它收到的内边距值来修改建议尺⼨,它会从建议尺⼨的对应边上减去这个边距值...
动画(二) – 控制动画
在 SwiftUI 中,有多种⽅式可以指定动画发⽣地时机 当某个特定的值改变时,触发隐式动画。 当某个特性事件发⽣时,触发显示动画。 动画类型 隐式动画 要指定隐式动画,可以在视图树的任意位置使...
GeometryReader
要获得视图的大小,即使不是不可能,也是很困难的。这正是 GeometryReader 可以提供帮助的地方。 GeometryReader 与推出式容器视图类似,可以添加子视图。它允许检查和使用有助于定位其中其他视...
如何使用 matchedGeometryEffect() 将一个视图的动画同步到另一个视图
如果你在视图层次结构的两个不同部分中有相同的视图,并且希望在这两者之间进行动画过渡——例如,从列表视图切换到放大的详细视图——那么你应该使用 SwiftUI 的 matchedGeometryEffect() 修饰...
视图传递
使用初始化器传递数据 struct ContentView: View { var body: some View { NavigationView { NavigationLink(destination: DetailView(text: '来自 ContentView 的您好')) { Text('转到详细视图...