SwiftUI 中的小部件 UI 预览

Posted

技术标签:

【中文标题】SwiftUI 中的小部件 UI 预览【英文标题】:Widget UI preview in SwiftUI 【发布时间】:2020-09-20 14:02:04 【问题描述】:

如何将小部件的预览插入应用程序?

谁能给我一些建议?

【问题讨论】:

【参考方案1】:

我使用 SwiftUI 做了一个 Widget 配置预览的简单版本。我使用了带有小 3D 旋转的 RoundedRectangle 并应用了阴影:

我将代码包含在一个名为 WidgetView 的自定义 View 中:

struct WidgetView<Content: View>: View 

    let content: Content

    init(@ViewBuilder content: () -> Content) 
        self.content = content()
    

    var body: some View 
        ZStack 
            RoundedRectangle(cornerRadius: 24, style: .continuous)
                .fill(Color(.systemBackground))
            content
        
        .frame(width: 162, height: 162)
        .rotation3DEffect(.degrees(10), axis: (x: 1, y: 1, z: 0))
        .shadow(color: Color(UIColor.systemGray), radius: 20, x: -5, y: 10)
    


用法很简单。只需在 Widget 视图中添加您想要的内容视图:

WidgetView 
    HealthActiveEnergyView(entry: ActiveEnergyEntry.mock())

.preferredColorScheme(.light)
.previewLayout(layout)
struct HealthActiveEnergyView: View 

    var entry: ActiveEnergyEntry

    var body: some View 
        VStack(alignment: .leading) 
            HStack 
                Text(NSLocalizedString("Active", comment: ""))
                    .foregroundColor(entry.configuration.accentColor)
                Spacer()
                Image(systemName: "flame.fill")
                    .font(.system(.title))
                    .foregroundColor(entry.configuration.accentColor)
            
            Text(dateFormatter.string(from: entry.date))
                .foregroundColor(Color(.systemGray))
                .font(.caption)
            HStack(alignment: .lastTextBaseline) 
                Text("\(entry.totalOfKilocalories)")
                    .font(.system(.largeTitle, design: .rounded))
                    .bold()
                    .foregroundColor(Color(.label))
                Text("kcal")
                    .foregroundColor(Color(.systemGray))
                Spacer()
            
            Spacer()
            Text(NSLocalizedString("AVG 7 DAYS", comment: ""))
                .foregroundColor(Color(.systemGray))
                .font(.caption)
            HStack(alignment: .lastTextBaseline) 
                Text("\(entry.avgOfKilocalories)")
                    .font(.system(.callout, design: .rounded))
                    .bold()
                    .foregroundColor(Color(.label))
                Text("kcal")
                    .foregroundColor(Color(.systemGray))
                    .font(.caption)
                Spacer()
            
        
        .padding()
    


【讨论】:

以上是关于SwiftUI 中的小部件 UI 预览的主要内容,如果未能解决你的问题,请参考以下文章

用于颜色选择的jQuery UI小部件(类似于Microsoft Office 2010中的小部件)。

从主窗口中的 UI 文件加载带有信号槽定义的小部件

URLImage 从不在 SwiftUI 的小部件应用程序中加载图像 [重复]

isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用

多个 ui 元素破坏了 WidgetExtension

多个文件中的 PyQt 小部件