• SwiftUI 官方教程(八)


    8. 动态生成预览

    接下来,我们会在 LandmarkList_Previews 中添加代码以在不同的设备尺寸上渲染列表。默认情况下,预览会以当前的 scheme 中设备的大小进行渲染。我们可以通过调用 previewDevice(_:) 方法来改变预览设备。SwiftUI官方教程

    8.1 首先,改变当前 list 的预览来显示 iPhone SE 的尺寸。

    我们可以输入任何 Xcode scheme 菜单中显示的设备名称。

    LandmarkList.swift

    import SwiftUI
    
    struct LandmarkList: View {
        var body: some View {
            NavigationView {
                List(landmarkData) { landmark in
                    NavigationButton(destination: LandmarkDetail(landmark: landmark)) {
                        LandmarkRow(landmark: landmark)
                    }
                }
                .navigationBarTitle(Text("Landmarks"))
            }
        }
    }
    
    struct LandmarkList_Previews: PreviewProvider {
        static var previews: some View {
            LandmarkList()
                .previewDevice(PreviewDevice(rawValue: "iPhone SE"))
        }
    }
    

    8.2 在 list 预览中用设备名称数组作为数据,将 LandmarkList 嵌入到 ForEach 实例中。SwiftUI教程

    ForEach 以与 list 相同的方式对集合进行操作,这样我们就可以在任何可以使用子视图的地方使用它,比如 stacks , lists ,groups 等。当数据元素像这里使用的字符串一样是简单的值类型时,我们可以使用 .self 作为标识符的 key path 。

    LandmarkList.swift

    import SwiftUI
    
    struct LandmarkList: View {
        var body: some View {
            NavigationView {
                List(landmarkData) { landmark in
                    NavigationButton(destination: LandmarkDetail(landmark: landmark)) {
                        LandmarkRow(landmark: landmark)
                    }
                }
                .navigationBarTitle(Text("Landmarks"))
            }
        }
    }
    
    struct LandmarkList_Previews: PreviewProvider {
        static var previews: some View {
            ForEach(["iPhone SE", "iPhone XS Max"].identified(by: .self)) { deviceName in
                LandmarkList()
                    .previewDevice(PreviewDevice(rawValue: deviceName))
            }
        }
    }
    

    8.3 使用 previewDisplayName(_:) 方法把设备名称作为 labels 添加到预览中。SwiftUI教程

    LandmarkList.swift

    import SwiftUI
    
    struct LandmarkList: View {
        var body: some View {
            NavigationView {
                List(landmarkData) { landmark in
                    NavigationButton(destination: LandmarkDetail(landmark: landmark)) {
                        LandmarkRow(landmark: landmark)
                    }
                }
                .navigationBarTitle(Text("Landmarks"))
            }
        }
    }
    
    struct LandmarkList_Previews: PreviewProvider {
        static var previews: some View {
            ForEach(["iPhone SE", "iPhone XS Max"].identified(by: .self)) { deviceName in
                LandmarkList()
                    .previewDevice(PreviewDevice(rawValue: deviceName))
                    .previewDisplayName(deviceName)
            }
        }
    }
    

    8.4 我们可以在 canvas 中体验不同的设备,对比它们在渲染 view 时的差异。

  • 相关阅读:
    Django入门
    外星人入侵完整版
    外星人入侵
    简单的socket通信
    购物车程序
    列表的使用&元组
    三目运算的使用&bytes类型转str类型
    hdu 2586 How far away ?
    hdu 1075 What Are You Talking About
    洛谷 P2292 [HNOI2004]L语言
  • 原文地址:https://www.cnblogs.com/suibian1/p/11030916.html
Copyright © 2020-2023  润新知